在SSH上执行存储在文件中的Bash脚本

35

假设我有以下的Bash脚本存储在名为foo.sh的文件中:

#!/bin/bash
echo foo

不需要使用scp命令,如何在远程机器上执行存储在foo.sh中的脚本?

我已经尝试了以下方法(有一些变化),但都没有成功:

$ ssh root@remote eval `cat foo.sh`

eval `cat foo.sh` 似乎在这里展开为 eval #!/bin/bash echo foo


可能是重复的问题:如何使用SSH在远程机器上运行shell脚本? - aioobe
当然,您需要设置SSH以使其无需密码:http://www.csua.berkeley.edu/~ranga/notes/ssh_nopass.html - user1968595
5个回答

63

我该如何向那个脚本传递参数? - Agostino
@Agostino:如果你需要使用一些参数调用local_script.sh,只需传递一个脚本的名称,该脚本带有必要的参数来调用local_script.sh,而不是直接调用local_script.sh :) - das_weezul
我希望将其编写为一行代码。你能给一个小的代码示例吗? - Agostino
非常好,你提供了源链接! - Kostas Demiris
我需要在自动化环境中执行此脚本。有什么办法可以提供ssh密码吗? - Devorein

10

在被接受的答案中,我看到:

我想把它变成一行代码。你能给个简短的示例吗?

就是这样:

ssh root@MachineB 'bash -s -- uno' < local_script.sh

或者更好的是,在此处使用文档

ssh root@MachineB 'bash -s -- uno' <<\EOF
> date
> echo $1
> EOF
jue sep 18 13:01:25 CEST 2014
uno

2
cat foo.sh | ssh HOSTNAME 

现在已经测试过了,但是还是需要小心使用! :)
(移除破折号(参见评论)和几乎所有内容 :))

为什么要使用 cat foo.sh -?这会阻塞程序,等待用户按下 ctrl-D - glenn jackman
好的,我没有可测试的环境。没有破折号?我已经纠正了它。 - user unknown
дҪ дёҚйңҖиҰҒз ҙжҠҳеҸ·пјҢcatе‘Ҫд»ӨжІЎжңүеҸӮж•°ж—¶д»Һж ҮеҮҶиҫ“е…ҘиҜ»еҸ–гҖӮдҪҶжҳҜдҪ ж №жң¬дёҚйңҖиҰҒcatпјҢд№ҹдёҚйңҖиҰҒfoo.shж–Ү件гҖӮеҸӘйңҖиҝҗиЎҢshеҚіеҸҜгҖӮ - Idelic

2

cat foo.sh | ssh -T root@remote 就可以实现此操作。 -T 选项会抑制警告,因为您正在从文件中进行输入。


关于无用的cat命令,听听这个。使用ssh root@remote < foo.sh就可以解决问题了。 - Hai Vu
你如何将变量传递给 foo.sh - CodyBugstein

0

您可以使用runoverssh

sudo apt install runoverssh

runoverssh -s localscript.sh user host

-s 远程运行本地脚本


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接