bash - 通过脚本连接多个ssh连接

标签 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

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

最佳答案

这是@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 放在这里,但使用纯文本形式的密码并不是一个好主意。使用基于 key 的身份验证可能会更好。

关于bash - 通过脚本连接多个ssh连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643637/

相关文章:

Linux:如何列出有关文件或目录的信息(大小,权限,按类型划分的文件数?)

bash - 你如何使用负偏移量在 bash 中获取字符串的后缀?

linux - bash 排序 - 如何使用时间戳排序

bash - 在两个独立的 shell 脚本之间共享变量

linux - shell脚本中的三重嵌套引号

linux - 无法让我的程序运行 - %GC 计算器

python - 将文本通过管道传输到 Python 脚本或提示符

linux - 如何通过命令行在多个网络连接之间进行选择?

shell - 通过 Shell 脚本将文件转换为另一个文件

linux - bash shell 脚本 101 - 在脚本中循环