具有动态 IP 的 SSH known_hosts

Ilm*_*war 3 vpn ssh tunneling known-hosts ssh-keys

我有一台位于防火墙后面的机器。我使用带有端口转发的 VPN 隧道通过 ssh 远程连接到它。为了连接到机器,我使用了 VPN 的外部 IP 以及我个人和临时分配的端口。我使用的命令是:

ssh USER@VPN_IP -p PORT
Run Code Online (Sandbox Code Playgroud)

由于VPN_IP并且PORT经常更改,我无法获得保存主机密钥known_host以摆脱中间人攻击的优势,但同时主机密钥对我来说是众所周知的,我可以按顺序将其提供给 ssh将其用于当前VPN_IPPORT组合。那可能吗?如何?

Esa*_*nen 6

known_hosts文件用于提供这些密钥,并且没有直接的命令行替代方案(无论如何它不会那么方便)。但是,您的目标完全可以通过该known_hosts文件实现!

通读man sshdssh_known_hosts文件格式

执行主机认证时,如果任何匹配的行具有正确的密钥,则接受认证;要么完全匹配,要么,如果服务器已提供用于身份验证的证书,则为签署该证书的证书颁发机构的密钥。

可以在~/.ssh/known_hosts(和/etc/ssh/ssh_known_hosts)中使用通配符:

这些文件中的每一行都包含以下字段:标记(可选)、主机名、密钥类型、base64 编码密钥、注释。字段由空格分隔。

主机名是一个以逗号分隔的模式列表(*?充当通配符);每个模式依次与规范主机名(在对客户端进行身份验证时)或用户提供的名称(在对服务器进行身份验证时)进行匹配。模式前面也可以! 表示否定:如果主机名与否定模式匹配,即使它与该行上的另一个模式匹配,也不会(该行)接受它。主机名或地址可以选择性地包含在[]括号内,然后是“:”和非标准端口号。

可以使密钥受信任

如果此密钥不存在,它仍会警告您其他密钥的真实性,显示指纹并自动添加,如果您回答yes。比较是逐行进行的。