在本地计算机上从远程服务器执行 shell 脚本

在本地计算机上从远程服务器执行 shell 脚本

想象一下远程服务器上的 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

文件从远程主机复制到当前工作目录,然后从当前工作目录执行

相关内容