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

时间:2009-06-16 12:29:06

标签: unix shell ssh command remote-server

我想创建一个自动登录到远程服务器并在服务器上抓取文件的脚本。该脚本已登录到服务器,但命令不在该计算机上运行。一旦我从远程服务器断开连接,命令就会在客户端计算机上运行。

!/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连接管道命令。

10 个答案:

答案 0 :(得分:14)

您应该使用scp(“安全副本”)而不是ssh(“安全shell”)。

答案 1 :(得分:13)

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

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

以及无SCP复制:

ssh localhost 'cat /bin/bash' > local_bash

答案 2 :(得分:5)

如果您的目标只是传输文件,则应使用scp。但是要在远程主机上执行某些命令而不在该远程主机上安装特定脚本,您可以像这样使用stdin:

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

答案 3 :(得分:3)

您应该以这种方式使用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 .

像其他已经提出的答案一样。

答案 4 :(得分:2)

脚本中的 ssh不能像那样工作。但它确实能够通过将命令指定为ssh的参数来在远程服务器上执行命令,如:

ssh brjones@server.com do_foo.sh

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

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

答案 5 :(得分:2)

除了Tiemen的答案之外,当然你可以通过以下方式管理本地脚本中的命令:

ssh thehost < commands.sh

答案 6 :(得分:1)

SCP? Remote是具有只读文件系统的设备。我不想让脚本落后,或者使用ssh的多次调用来清理它或者多次调用以一次执行一行。名单继续......

great solution here by Yarek T:

你可能不得不在引用或转义中玩一下但是它完成了工作,只需要一个连接到遥控器并且脚本保持在本地。

答案 7 :(得分:0)

为什么不使用scp

答案 8 :(得分:0)

有些人已经解释过如何做出更好,更轻松的特定示例。

如果你确实需要编写远程互动脚本,可以考虑使用expect

答案 9 :(得分:0)

如果要调用localhost上的远程主机上的脚本

ssh remote Password@remoteHostname < localScript.sh

如果要调用已在远程主机上的脚本

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