我有两组服务器,一组以 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。