我正在运行一个Docker容器,它希望端口22上的SSH通信。主机也期望SSH通信,但是在端口2222上。
虽然在端口2222上的SSH工作没有问题,但是我的SSH客户端却抱怨说,当在端口22上进行SSH连接时,远程主机标识已经改变了。这是合理的,因为docker容器与主机有不同的标识。
有没有办法解决这个问题?
最简单的(不确定最清洁或最好的)是将主机密钥复制到容器中。
如sshd(8)手册页所示,known_hosts文件具有这样的语法:
主机名是逗号分隔的模式列表('*'和'?'充当通配符); 每个模式依次与规范主机名(在对客户端进行身份validation时)或用户提供的名称(在对服务器进行身份validation时)进行匹配。 模式也可以在“!”之前 以表示否定:如果主机名称与否定模式相匹配,即使与线路上的其他模式匹配,也不会被该线路接受。 主机名或地址可以select性地包含在'['和']'括号内,然后是“:”和一个非标准的端口号。
特别是最后一句话提到,你也可以指定非标准的端口到主机名,以确保它被用于正确的端口。 以前的解决scheme比较模糊
所以编辑你的~/.ssh/known_hosts文件就可以达到这个效果。