通过SSH执行大量命令

时间:2013-04-17 16:19:48

标签: shell ssh

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

现在我可以确定我是否在本地操作而没有太多麻烦,但是我有一组非常复杂的命令可以运行,远远超过直接作为参数提供给ssh。

我想做的是:

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

# Run some commands
# exit

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

如果没有,替代方案是我将需要运行的命令提取到自己的shell脚本中,并确保我的ssh命令复制shell脚本(如果它已经不存在)然后运行它,但我不知道该怎么做?我熟悉基本的unix命令,但不是这样的!

无论如何,如果有可能的话,我会很感激有关最佳方法的任何建议,并附上一个详细的例子。

2 个答案:

答案 0 :(得分:1)

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

无论如何,似乎我最好的选择是将命令解压缩到shell脚本中并根据需要将其发送到服务器。也就是说,我在想这里文档可能也允许我在不发送脚本的情况下执行此操作,但是在需要时发送脚本可能是我需要的工作量的更有效选项。

以下是我在为此文档撰写的一个示例:

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

    # Some commands

if [ -n "$HOST" ]; then REMOTE_SESSION; fi

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

答案 1 :(得分:0)

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