如何使用SSH在远程机器上运行shell脚本?
我必须在远程机器上运行一个shell脚本(windows / Linux)。
我在机器A和B上都配置了SSH。我的脚本在机器A上,它将在远程机器B上运行我的一些代码。
本地和远程计算机可以是基于Windows或Unix的系统。
有没有办法使用plink / ssh来执行此操作?
如果机器A是Windows机器,则可以使用Plink(PuTTY的一部分)和-m参数,它将在远程服务器上执行本地脚本。
plink root@MachineB -m local_script.sh
如果机器A是基于Unix的系统,则可以使用:
ssh root@MachineB 'bash -s' < local_script.sh
您不应该将脚本复制到远程服务器才能运行它。
这是一个古老的问题,杰森的答案正常,但我想补充一点:
ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH
这也可以用于需要用户输入的su和命令。 (注意'
逃脱的heredoc)
编辑:由于这个答案不断获得流量,我会添加更多信息heredoc的这个奇妙的用途:
你可以用这个语法嵌套命令,这就是嵌套的唯一方法似乎可行(以一种理智的方式)
ssh user@host <<'ENDSSH'
#commands to run on remote host
ssh user@host2 <<'END2'
# Another bunch of commands on another host
wall <<'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
实际上你可以与telnet,ftp等一些服务进行对话。但是请记住,heredoc只是将stdin作为文本发送,它不会等待行之间的响应
编辑:我刚刚发现,如果您使用<<-END
!您可以缩进内部!
ssh user@host <<-'ENDSSH'
#commands to run on remote host
ssh user@host2 <<-'END2'
# Another bunch of commands on another host
wall <<-'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<-'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
(我认为这应该工作)
另见http://tldp.org/LDP/abs/html/here-docs.html
另外,如果您想从目标主机中选择它们,请不要忘记转义变量。
这在过去让我感觉到了。
例如:
user@host> ssh user2@host2 "echo $HOME"
打印出/ home / user2
而
user@host> ssh user2@host2 "echo $HOME"
打印出/ home / user
另一个例子:
user@host> ssh user2@host2 "echo hello world | awk '{print $1}'"
正确打印出“你好”。
链接地址: http://www.djcxy.com/p/2887.html上一篇: How to use SSH to run a shell script on a remote machine?
下一篇: Is double square brackets [[ ]] preferable over single square brackets [ ] in Bash?