I would like to create a script that automatically logs into a remote server and grabs a file on the server. The script already logs into the server however the commands are not run on that machine. Once I disconnect from the remote server, the commands are run on the client machine.
!/bin/sh
ssh -o PreferredAuthentications=publickey brjones@server.com
cd ~/folder
"i would like to grab file and copy it to client machines folder"
EDIT: I am not sure if you noticed but I am used a passwordless connection to the remote server using ssh and keygeneration. I appreciate the ideas but I am looking to possibly pipe commands or run commands on the remote server with the script on the client. I realize that the remote server does not have access to the client script, however I was curious if it was possible to pipe the commands through the ssh connection.
If your goal is only to transfer files, you should use scp. But to execute some commands on the remote host without having a specific script on that remote host, you can simply use the stdin like this:
You should be using scp ("secure copy") rather than ssh ("secure shell").
Several people have already explained how to do the particular example you give better and easier.
If you really do need to script a remote interaction, you might consider using
expect
.If you want to invoke a script on remote host, which present on localhost
ssh remote Password@remoteHostname < localScript.sh
If you want to invoke a script which is already on remote host
ssh remote Password@remoteHostname "$PATH_OF_SCRIPT/remoteScript.sh"
Also, if you don't want to have a script available on the remote server, try the following:
and for SCP-less copying:
In addition to the answer by Tiemen, of course you can pipe the commands from your local script with: