如何为正则表达式配置 SSH 后备密钥

如何为正则表达式配置 SSH 后备密钥

我正在尝试配置 SSH 配置文件以尝试域的多个不同密钥和用户。我最初在点文件中使用一个函数来执行此操作,但它笨拙、缓慢且丑陋。

我的公司有多台服务器,拥有不同的私钥和用于SSH登录的用户。主机名有很多,但域总是相同的。

我可以在我们的主记录中查找我需要的密钥/用户名对,但这并不有趣。

这是我的 SSH 配置文件的一部分:

 Host *.companydomain.net
     User ubuntu
     PreferredAuthentications publickey
     IdentityFile ~/.ssh/key_a.pem

 Host *.companydomain.net
     User ubuntu
     PreferredAuthentications publickey
     IdentityFile ~/.ssh/key_b

 Host *.companydomain.net
     User anotheruser
     PreferredAuthentications publickey
     IdentityFile ~/.ssh/key_c 

所以现在看来​​第一个条目(使用key_a.pem)已被尝试,然后它失败并且没有失败。理想情况下,我希望这个失败并尝试三种组合中的每一种,直到登录成功。

我正在运行运行 OpenSSH_7.6p1 的 macOS。

谢谢!

答案1

该手册说您可以使用多个IdentityFile指令,并且将使用所有列出的文件,因此前两个条目可以组合起来

Host *.companydomain.net
    User ubuntu
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/key_a.pem
    IdentityFile ~/.ssh/key_b

但我不认为您可以通过一次ssh调用(或一个 SSH 连接)尝试多个用户名,因此您可能需要编写脚本。

如果你把第三个IdentityFile和其他的放在一起,脚本不需要很长,我认为应该这样做:

#!/bin/sh
for user in ubuntu anotheruser; do
    ssh -l "$user" "$@" && break;
done

User在这种情况下,请从配置文件中删除该指令。)

相关内容