如何编写脚本将命令转发到 SSH 服务器?

如何编写脚本将命令转发到 SSH 服务器?

我有一个远程 SSH 服务器,其中包含几个适合我工作的自定义实用程序。然而,有时我会感到懒惰,不想仅仅为了执行单个命令而启动完整的 SSH 会话。

这促使我创建一个类似于 BusyBox 的多调用脚本,我可以创建符号链接,以查看调用它的名称,并在我的服务器上运行匹配的命令并转发我给它的任何参数。

我首先想到了这个:

#!/bin/bash

exec ssh -q -t my-server "$(basename "$0")" "${@@Q}"

但这并没有PATH正确设置我的,所以我无法使用我的所有程序。

接下来,我尝试将 bash 作为登录 shell:

exec ssh -q -t my-server bash -l "$(basename "$0")" "${@@Q}"

但每当我运行不是 bash 脚本的东西时,我都会收到这样的错误:

/bin/ls: /bin/ls: cannot execute binary file

我尝试将命令字符串传递给 bash:

exec ssh -q -t my-server bash -l -c "$(basename "$0")" "${@@Q}"

这正确设置了 PATH 并执行二进制文件,但我传递给二进制文件的任何参数都会丢失。

我尝试将参数作为这里字符串传递:

exec ssh -q -t my-server bash -l <<< "$(basename "$0") ${*@Q}"

但互动节目会立即关闭。

我想做的事情可能吗?如何通过 SSH 运行不符合标准的任意远程命令PATH,并使其表现得像我正常登录一样?

答案1

看来我需要添加另一级转义引号才能使 bash 正确运行命令。到目前为止,这完全按照我想要的方式工作。

#!/bin/bash

exec ssh -q -t eng-vm bash -l -c \""$(basename "$0") ${*@Q}"\"

相关内容