【问题标题】:Connect to multiple ssh connections through scripts通过脚本连接多个 ssh 连接
【发布时间】:2014-10-27 21:55:57
【问题描述】:

我一直在尝试使用脚本自动输入 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

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

【问题讨论】:

  • 我的意思是,它应该如何工作?您不能在同一个窗口中有两个活动的 SSH 会话(尽管例如通过拆分窗格)。你到底想做什么?
  • 如果您希望将相同的 cmd(同时)发送到多台计算机,这不是解决方案。 (有一个系统管理员程序可以执行此操作,但我现在找不到名称)。否则,请阅读有关在后台运行 shell cmds 的信息,并在 cmd 行末尾使用 & 字符。祝你好运。
  • @TimZimmermann:他可能想将第一台主机用作通往第二台主机的网关。
  • @TimZimmermann my_hostname_2 只能通过 my_hostname_1 访问。如果没有脚本,我将运行第一个 ssh 命令连接到 my_hostname_1,然后运行第二个 ssh 命令连接到 my_hostname_2。我想我会写一个脚本来节省时间。
  • 检查 ssh_config 中的 ProxyCommand 指令

标签: bash shell


【解决方案1】:

这是@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

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

您也可以在 ~/.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 放在这里,但使用纯文本密码并不是一个好主意。使用基于密钥的身份验证可能会更好。

【讨论】:

  • 使用最新版本的ssh,您可以避免调用netcatProxyCommand ssh my_hostname_1 -W %h:%p(它需要在网关上启用隧道,通过)。
【解决方案2】:

Bash 脚本是一系列命令。

echo moo
echo bar

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

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

ssh remote echo moo

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

要从另一台主机连接到一台主机,原则上您可以这样做

ssh host1 ssh host2

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2010-12-22
    相关资源
    最近更新 更多