通过脚本连接到多个ssh连接

时间:2014-09-03 11:54:28

标签: bash shell

我一直在尝试使用脚本自动输入ssh连接。 This以前的SOF帖子到目前为止帮助了我。使用一个连接工作(第一个ssh语句)。但是,我希望在连接后创建另一个ssh连接,我认为它看起来像这样:

#! /bin/bash
# My ssh script

sshpass -p "MY_PASSWORD1" ssh -o StrictHostKeyChecking=no *my_hostname_1*
sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no *my_hostname_2*

运行脚本时,我只连接到my_hostname_1,并且在退出第一个ssh连接之前,第二个ssh命令才会运行。

我尝试过这样的if语句:

if [ "$HOSTNAME" = my_host_name_1 ]; then
    sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no *my_hostname_2*
fi

但在退出第一个连接之前,我无法读取任何命令。

2 个答案:

答案 0 :(得分:3)

以下是@lihao建​​议的ProxyCommand示例:

#!/bin/bash

sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no \
    -o ProxyCommand='sshpass -p "MY_PASSWORD1" ssh m_hostname_1 netcat -w 1 %h %p' \
    my_hostname_2

您通过第一个主机代理到达第二个主机。假设您在netcat上安装了my_hostname_2。如果没有,您需要安装它。

您也可以在~/.ssh/config文件中进行设置,这样您就不需要在命令行中使用代理内容了:

Host my_hostname_1
    HostName my_hostname_1

Host my_hostname_2
    HostName my_hostname_2
    ProxyCommand ssh my_hostname_1 netcat -w 1 %h %p

但是,密码处理有点棘手。虽然您可以将sshpass放在此处,但以明文形式提供密码并不是一个好主意。使用基于密钥的身份验证可能会更好。

答案 1 :(得分:0)

Bash脚本是一系列命令。

echo moo
echo bar

将运行echo moo并等待它完成,然后运行下一个命令。

您可以像这样运行远程命令:

ssh remote echo moo

将连接到remote,运行命令,然后退出。如果此后脚本文件中还有其他命令,则执行这些命令的shell将继续执行下一个命令,显然是在启动脚本的主机上。

要从另一个主机连接到一个主机,原则上可以

ssh host1 ssh host2

但@zerodiff建议的代理命令改善了体验的几个方面。