根据主机名进行 SSH

根据主机名进行 SSH

我有两组服务器,一组以 ab22 开头,一组以 cd22 开头。对于 ab22 主机 (ab22*),我们必须先 ssh 到主机 A1,然后再到特定主机。对于 cd22 主机 (cd22*),我们必须先 ssh 到主机 B1,然后再到特定主机。

我想从我的主目录直接 ssh 这些主机。它应该 ssh 我提供的主机名。

因此,如果我提供 ab22xyz,它就应该去那里,如果我提供 ab22lmn,它就应该去那里。

据我所知,我觉得它将使用 ~/.ssh/config 文件,但我无法进行这些设置。

由于数量太大,我无法在配置文件中添加单个主机。

有人能帮帮我吗?我需要知道这是否可行,如果可行,如何实现。

请提供要在主机文件中进行的条目。

(我已设置密钥用于登录 A1 和 B1,但未设置用于登录 indiv 服务器)

请帮忙。谢谢

答案1

Host不仅接受名称,还接受模式。只需使用ab22*cd22*作为您的Host条目并进行相应配置即可。

答案2

在完成所有设置之前,您必须确定几件事。首先,没有简单的方法可以在机器之间“跳跃”,除非您使用本地密钥并在另一端进行身份验证(例如,从 ssh 进行端口转发、-L 标志)。其次,您无法真正指示 SSH 转到一台机器,然后连接到另一台机器。

用于登录基础设施的网关机器的通用名称是跳转箱。我建议您在主机 A1 和 B1 上生成私钥,然后在 ab22* 和 cd22* 之间适当地分配它们的公钥。这是一种更好的做法,如果您团队中的某个人决定退出,您只需从两个地方删除他们的密钥,而不是从数百台潜在服务器中删除。

我的建议是编写一个小脚本,包装 ssh 二进制文件,通过 ssh 进入相应类别的主机(分别为 ab22* 和 cd22*)的跳转箱,然后通过 ssh 进入您要访问的终端机器。

答案3

您可以使用 shell 函数在 ssh 参数中查找 ab22* 和 cd22* 模式并执行正确的操作。假设您使用 sh、bash 或 ksh:

myssh () {
   case "$@" in
      ab22*) relay=A1 ;;
      cd22*) relay=B1 ;;
      *) relay="" ;;
   esac
   if test -z "$relay"
   then
      ssh $@
   else
      ssh -t $relay ssh $@
   fi
}

如果将此函数放入您的 .profile 中,它将为您提供一个 myssh 命令,该命令在 ssh 到最终目的地之前根据需要先 ssh 到 A1 或 B1。

相关内容