如何通过 SSH 在远程主机上运行本地(非 shell)脚本?

如何通过 SSH 在远程主机上运行本地(非 shell)脚本?

cat someFile | ssh someHost当 someFile 是时我怎样才能工作不是bash 脚本?我想远程执行珀尔但是当我尝试使用 cat | 脚本时,我从 bash 中得到了一堆语法错误ssh 命令。

答案1

如果您想通过 SSH 连接推送 Perl 脚本,则必须在远程端运行 Perl 解释器。它将从标准输入读取脚本:

ssh remotehost perl < somescript.pl

对于 Perl,它甚至应该-T从输入的 hashbang 行读取命令行开关(除了 )。

如果你想给 Perl 解释器提供命令行参数,你可以将它们添加到命令行之后perl。如果你想为脚本,您需要明确告诉解释器从 stdin 读取脚本(否则它将采用第一个参数作为要查找的文件名)。

那么,这里-l是解释器和foo脚本bar

echo 'print "> $_"  foreach @ARGV' | ssh remotehost perl -l - foo bar 

请注意,执行此操作仅ssh somehost < script.sh依赖于远程登录 shell 与脚本兼容。 (即,如果远程 shell 碰巧是其他东西,Bash 脚本将无法工作。)

答案2

ssh someHost将执行您的默认 shell,而默认 shell 又将执行从标准输入读取的命令。由于您要将 的内容发送someFile到标准输入,因此它在逻辑上会尝试执行 someFile 的内容。

您没有告诉我们 someFile 应该包含什么。假设它的内容应该输入到你的 perl 脚本中,你应该做的是:

cat someFile | ssh someHost your_perl_script

或更好:

ssh someHost your_perl_script < someFile

答案3

为了=>

将本地输出写入远程文件:您刚刚在 $myhost 上安装了 apache。现在你想测试一下。

您可以将测试字符串回显到文件中,只是这次文件位于远程 htdocs 根目录中:

回声“它有效”| SSH[电子邮件受保护]'猫>> /usr/local/apache/htdocs/it_works.html'

使用 less 或 cat 打开远程文件: 与猫:

SSH[电子邮件受保护]“猫/usr/local/apache/htdocs/it_works.html”

更少:

SSH[电子邮件受保护]“少/usr/local/apache/htdocs/it_works.html”

Grep 远程文件:

带管:

SSH[电子邮件受保护]“猫/usr/local/apache/htdocs/it_works.html”| grep“有效”

只需远程 grep:

SSH[电子邮件受保护]“grep 工作 /usr/local/apache/htdocs/it_works.html”

用tail查看远程日志:

这样就可以实时观察apache服务器的访问情况:

SSH[电子邮件受保护]“尾-f /etc/httpd/logfiles/access_log”

这个答案的来源是这里

相关内容