如何使用SSH远程运行脚本文件

79

我想远程运行一个脚本。但是系统无法识别路径。它报错"没有这样的文件或目录"。我使用的方式正确吗?

ssh kev@server1 `./test/foo.sh`

1
./test/foo.sh 文件位于本地还是远程服务器上? - Finesse
3
可能是如何使用SSH在远程机器上运行shell脚本?的重复问题。 - DennisLi
6个回答

190

你可以这样做:

ssh user@host 'bash -s' < /path/script.sh

2
仅供参考,这里提供了如何在Perl中执行远程服务器上的脚本的链接:https://dev59.com/AHXYa4cB1Zd3GeqP86_a - arun
2
很棒的解决方案!通过 ssh2 模块可以在 Node 中查看相同的解决方案:https://gist.github.com/mscdex/7c9f8358b8331ea567b7 - knownasilya
8
这个回答比被采纳的回答好得多,而且恰好回答了问题,而被采纳的回答则没有。 - nic
6
替代方案:cat /path/script.sh | ssh user@host 'bash -s' - Claudiu
4
使用参数运行的示例。创建一个样本脚本:echo 'printf "%s\n" $(hostname) "$@"' > script 并使用参数foo bar baz运行它:ssh user@host bash -s foo ba{r,z} < script - ingydotnet
显示剩余7条评论

54

反引号将在本地shell中运行命令,并将结果放在命令行上。你的意思是“执行./test/foo.sh,然后将输出传递给我仿佛我在这里在命令行上键入了它”。

尝试下面的命令,并确保那是从远程计算机的主目录到你的脚本的路径。

ssh kev@server1 './test/foo.sh'

此外,脚本必须存在于远程计算机上。这样做的本质是使用所列出的命令作为您的 shell 登录到远程计算机。您不能像这样在远程计算机上运行本地脚本(除非有某些我不知道的有趣技巧)。


17
以下是一个有趣的技巧,取自http://wpkg.org/Executing_local_programs_and_scripts_remotely: cat /usr/bin/program | ssh user@server "cat > /tmp/program ; chmod 755 /tmp/program ; /tmp/program --arguments" - Mark Rushakoff
1
是的,我想到了类似的方法,但你并没有真正执行本地程序,而只是以一种不必要复杂的方式进行复制。如果你要这样做,你可以使用scp /path/to/script.sh user@server: && ssh user@server ./script.sh。不过这样做需要输入密码两次,所以嗯。 - psanf
@psanf,您可以始终设置基于证书的登录,这样您就不必输入密码了。 - pm_labs
不要那样做,@MarkRushakoff,你执行的东西在 /tmp/program,所以你会面临竞争条件的问题,有人可以在移动文件后放置实际调用 /tmp/program 的文件。把它写到 ~ 中。 - Et7f3XIV
@psanf,你可以使用SSH代理。 - Et7f3XIV

24

如果您想在远程执行本地脚本而不保存该脚本,请按照以下步骤操作:

cat local_script.sh | ssh user@remotehost 'bash -'

对我而言,它起到了很好的作用。

即使是从Windows到Linux,只要在Windows计算机上安装了MSYS,我也能够做到。


1
如何将参数传递给 local_script.sh? - dima.rus
1
@dima.rus 本地或远程参数? 可以通过环境变量来实现,只需在 bash - 前放置带有您的值的变量即可。 - Sergey Kuznetsov

2

我不知道是否可以直接运行它。

通常我会使用scp先复制它,然后登录运行。

scp foo.sh user@host:~
ssh user@host
./foo.sh

1
我能够使用以下命令调用一个shell脚本:

我能够使用以下命令调用一个shell脚本:

ssh ${serverhost} "./sh/checkScript.ksh"

当然,checkScript.ksh 必须存在于 $HOME/sh 目录中。

0

让用户"Kev"可以执行脚本,然后通过以下命令删除尝试运行它:sh kev@server1 /test/foo.sh


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