【问题标题】:Execute large number of commands via SSH通过 SSH 执行大量命令
【发布时间】:2013-04-21 03:41:22
【问题描述】:

好的,所以我有一个脚本需要通过 SSH 执行一堆命令,但是如果提供的目标是本地路径而不是主机名,我还想允许它在本地运行相同的命令。

现在我可以毫不费力地确定我是否在本地操作,但我有一组非常复杂的命令要运行,远远超过直接作为参数提供给 ssh 的范围。

我想做的是这样的:

if [ -n "$HOST" ]
    then
        ssh "$HOST"
fi

# Run some commands
# exit

但是有一些明显的问题,例如我如何传递适当的变量并退出,而不会导致脚本在本地定位时提前结束。所以我不确定这是否可能,有没有办法使用实际远程运行的普通 shell 命令来执行上述操作?

如果没有,另一种方法是让我将需要运行的命令提取到他们自己的 shell 脚本中,并确保我的 ssh 命令复制 shell 脚本(如果它不存在的话)然后运行它,但我也不知道该怎么做?我熟悉基本的 unix 命令,但不是这样的!

无论如何,如果可能的话,我将不胜感激任何关于最佳方式的建议,并提供详细示例。

【问题讨论】:

    标签: shell ssh


    【解决方案1】:

    信任实际上不是问题,因为我已经为无密码 SSH 设置了公钥身份验证。

    无论如何,似乎我最好的选择是将命令提取到 shell 脚本中并根据需要将其发送到服务器。也就是说,我认为这里的文档也可能允许我在不发送脚本的情况下执行此操作,尽管在需要时发送脚本对于我所需的工作负载可能是更有效的选择。

    这是我对此处文档的想法的示例:

    if [ -n "$HOST" ]; then ssh "$HOST" <<- 'REMOTE_SESSION'; fi
    
        # Some commands
    
    if [ -n "$HOST" ]; then REMOTE_SESSION; fi
    

    主要困难是确保远程会话“块”中的命令结构正确,因为如果打开 SSH 连接,任何标准输入和标准输出都将在远程服务器上。

    【讨论】:

      【解决方案2】:

      看看远程shell。 http://en.wikipedia.org/wiki/Remote_Shell 不过还是有一些问题,比如如何处理安全问题。将密码存储在纯文本文件中不是您想要的。您还需要在计算机之间建立某种信任。如果您使用的是 linux/unix,请查看您的本地手册页。

      【讨论】: