2013-04-17 176 views
1

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

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

我想要做的是一样的东西:

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

# Run some commands 
# exit 

但也有明显的问题,比如我怎么会通过相应的变量和退出,而不会导致当指定本地脚本提前结束。所以我不确定这是否可行,有没有办法像上面那样使用普通的shell命令来实现远程运行?

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

无论如何,我会很感激任何建议,以最好的方式来做到这一点,如果可能的话,给一个详细的例子。

回答

-1

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

1

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

无论如何,看来我最好的选择是将命令提取到一个shell脚本中并根据需要发送给服务器。也就是说,我在这里想的是,文档也可以让我在不发送脚本的情况下完成它,尽管在需要时发送脚本可能是我需要的更高效的工作量选项。

这里有一个例子我是一个here文档思维:

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

    # Some commands 

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

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