UNIX ssh脚本,在远程服务器上运行命令

我想创build一个脚本,自动login到远程服务器,并抓取服务器上的文件。 该脚本已经login到服务器,但是该命令不在该机器上运行。 一旦从远程服务器断开连接,命令就在客户机上运行。

!/bin/sh ssh -o PreferredAuthentications=publickey brjones@server.com cd ~/folder "i would like to grab file and copy it to client machines folder" 

编辑:我不知道,如果你注意到,但我用密码连接到远程服务器使用ssh和keygeneration。 我很欣赏这个想法,但是我正在寻找可能的命令,或者在客户端用脚本在远程服务器上运行命令。 我意识到,远程服务器不能访问客户端脚本,但我很好奇,如果有可能通过SSH连接pipe道命令。

你应该使用scp (“secure copy”)而不是ssh (“secure shell”)。

另外,如果您不希望在远程服务器上有可用的脚本,请尝试以下操作:

 ssh thehost 'cd /tmp; ls; echo Hello world, I am `hostname`' 

和无SCP的复制:

 ssh localhost 'cat /bin/bash' > local_bash 

如果你的目标只是传输文件,你应该使用scp。 但是要在远程主机上执行一些命令,而不在该远程主机上使用特定的脚本,则可以简单地使用stdin,如下所示:

 !/bin/sh ssh -o PreferredAuthentications=publickey brjones@server.com << EOT cd ~/folder echo "hello" > hello.txt ... EOT 

你应该以这种方式使用ssh在远程机器上执行脚本,

 ssh user@server exec /path/to/script/script.sh 

其中script.shuser登录的给定路径上的服务器上可用。


如果脚本不在服务器上,但在本地计算机上可用(并且两台计算机之间没有共享的NFS共享空间),则应该使用scp发送脚本,

 scp script.sh user@server:/path/to/script/ 

现在,为了获得一个服务器文件的具体情况,你应该执行,

 scp user@server:/path/to/file/filename . 

像其他一些答案已经建议。

在脚本中的SSH不起作用。 但是,它具有通过将命令指定为ssh的参数在远程服务器上执行命令的功能,如下所示:

ssh brjones@server.com do_foo.sh

将在服务器上运行do_foo.sh脚本

然而对于你的情况,看起来你真正想要的是SCP。

除了铁门的回答,当然你可以用你的本地脚本来管理命令:

 ssh thehost < commands.sh 

SCP? 远程是具有只读文件系统的设备。 我不想把脚本留在后面,或者使用多个ssh调用来清理它,或者多次调用一次执行一行。 名单继续…

Yarek T在这里很好的解决方案:

您可能需要使用引号或转义进行游戏,但可以完成工作,只需连接到远程,脚本保持在本地。

为什么不使用scp ?

有几个人已经解释了如何做更好,更容易的特定例子。

如果你真的需要脚本远程交互,你可以考虑使用expect

如果你想调用远程主机上的一个脚本,它存在于localhost上

ssh remote Password@remoteHostname < localScript.sh

如果你想调用已经在远程主机上的脚本

ssh remote Password@remoteHostname "$PATH_OF_SCRIPT/remoteScript.sh"