如何在通过telnettesting端口时更改OpenSSH横幅文本

我正在部署一个脚本,在不受我控制的防火墙后面的各种客户端上运行。 脚本尝试SSH客户端login到我控制的远程服务器(该脚本预先加载了用于身份validation的私钥)。 某些数据中心的一些防火墙将所有OUTBOUND端口22的请求redirect到不同的服务器(各个设施的系统pipe理员似乎已经为了自己的目的做了这些)。

在这些情况下,脚本失败(因为ssh客户端login失败)。 该脚本具有testing用户连接的诊断工具。 为了能够确定我的远程服务器是否可以从端口22上的工作站访问,我想运行该命令

telnet my-remote-host 22 

从我的脚本,并testing响应。 我的目标服务器响应:

 SSH-2.0-OpenSSH_4.3 

我的本地开发服务器响应:

 SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4 

注意:这些是端口22上的Telnet响应,而不是我的服务器的OpenSSH横幅文本(在这种情况下这是不可访问的)

我如何控制这个文本? – 所以我可以在这种情况下插入一个令牌来标识我自己的服务器。 接受端口22请求的数据中心服务器可能与我自己的远程服务器具有完全相同版本的OpenSSH。

(目前我的诊断只是报告失败的login,但也有其他原因可能发生 – 我正在寻找一个更细粒度的诊断,可以testing,看看我的服务器是否真的可以在端口22上,然后我尝试一个真正的login)

对不起,恐怕只有修改源文件的方法才能手动编译ssh。

你做错了! 确定您是否到达“良好”服务器的唯一方法是检查其密钥的指纹。 看看ssh_config(5)手册页。 你正在寻找的参数应该是' StrictHostKeyChecking '

顺便说一句,不要用这个横幅做愚蠢的事情。 它的内容是在协议规范中定义的,改变它可能会阻止你的客户端连接。

您可以/应该使用ssh-keyscan来收集和比较您的主机的公钥。 我可以想象,假冒伪劣比replace横幅要困难得多(正如你从其他反应中看到的那样,往往会让人们在领子下面变得很热!)。 如果你得到了密钥,并且它与你所知道的密钥相匹配,那么主机已经启动,并在端口22上进行监听,而无需login。这样可以节省每当新版本发布时不得不重新编译你的ssh软件包。

  $ ssh-keyscan localhost # localhost SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4 localhost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5qXqsZ4S/e4ANfQraXbJx9muKgdrPWrwI/SrIbnZLso9Poszmt3+NrBbTYkuZR92a6BL2gDXCdG0ugsY01u6xItKnnB0XZLYkSqqqwoGubqWbGfC5Zxsosne9cCevVNl3aomSNf8ctw+rEdBfrWjom6wu0CTy1umbDkT186l9LDoefzeOqSpPyIQBHZcDPeeY0B8vPyTCsC5ly/hwoQb/3nT5QMRaawlHNKJMgDE3avTUsPdtVjG2V55rpJpIDeBid7icMwxbGqTAS9T3hW111BdGGjaXspk1t23FnZOUQTzfI4kXj3SxUjSHIx6czX9SZ9NMa/7VewtJPVxRuPLGw== 

每个主机的密钥都不一样。

所以像这样的事情会让球滚动。

 key=$(ssh-keyscan localhost) known_key="localhost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5qXqsZ4S/e4ANfQraXbJx9muKgdrPWrwI/SrIbnZLso9Poszmt3+NrBbTYkuZR92a6BL2gDXCdG0ugsY01u6xItKnnB0XZLYkSqqqwoGubqWbGfC5Zxsosne9cCevVNl3aomSNf8ctw+rEdBfrWjom6wu0CTy1umbDkT186l9LDoegzeOqSpPyIQBHZcDPeeY0B8vPyTCsC5ly/hwoQb/3nT5QMRaawlHNKJMgDE3avTUsPdtVjG2V55rpJpIDeBid7icMwxbGqTAS9T3hW111BdGGjaXspk1t23FnZOUQTzfI4kXj3SxUjSHIx6czX9SZ9NMa/7VewtJPVxRuPLGw==" echo "($key)" echo "-------" echo "($known_key)" if [[ "$key" = $known_key ]]; then echo "GOOD host key matches known key" else echo "ERROR host key does not match known key" fi