想象一下远程服务器上的 shell 脚本:
#!/bin/bash
rm /test.x
我如何(如果可能)从本地计算机执行此脚本以删除/test.x
本地计算机上的文件。显然,解决方案应该是使用ssh
授权之类的方法,但无需从远程服务器下载脚本文件。
事实上,我想使用远程脚本作为在本地计算机上运行的 shell 命令的提供者。
答案1
您需要以某种方式下载脚本的内容。你可以做
ssh remote-host cat script.bash | bash
但这会产生同样的问题:
cat script.bash | bash
即脚本中的 stdin 将是脚本本身(如果脚本中的命令需要从用户获取一些输入,这可能会成为问题)。
那么,更好的替代方案(但您需要一个支持 ksh、zsh 或 bash 等进程替换的 shell)是:
bash <(ssh remote-host cat script.bash)
这两种方法都会下载脚本并检索其内容,但不会将其存储在本地。相反,内容被送入管道,管道的另一端由 读取和解释bash
。
您还可以使用以下命令在当前 bash 进程中执行远程脚本的内容:
eval "$(ssh remote-host cat script.bash)"
但这会在运行脚本之前完全下载脚本(并将其存储在内存中)。
显而易见的解决方案是:
. <(ssh remote-host cat script.bash)
但请注意,某些版本的 bash 存在问题。
答案2
挂载包含脚本的远程文件系统sshfs。这使得脚本成为您知道如何执行的本地文件。
mkdir /path/to/remote-host
sshfs remote-host:/ /path/to/remote-host
/path/to/remote-host/path/to/script
答案3
这是一个老问题,但出现在谷歌上的第一个点击中,所以这是几年后的更新。
这可以使用 scp 在一行上完成:
scp remote-host@/full-path/script.sh . && ./script.sh
文件从远程主机复制到当前工作目录,然后从当前工作目录执行