是否可以修改建立原始连接时 OpenSSH 服务器显示的字符串?
这与显示的文本横幅无关后连接已建立,可以通过Banner
中的参数进行配置sshd_config
,但关于 SSH 服务器在握手之前在连接尝试时发送的原始输出。
例如,给定一个原始的 telnet 连接
$ telnet localhost 22
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.2p2
有没有办法将识别信息减少到最低限度?
我的理解是,SSH-2.0-
必须存在,因为 SSH 协议要求这样做,但是OpenSSH_7.2p2
协议可能不需要后面的字符串 - - ,但我看不到在不重新编译的情况下更改或删除它的方法。
其目的是避免提供超出协议运行严格必要范围的信息。
答案1
否。版本字符串在 version.h 中定义OpenSSH 源代码作为
#define SSH_VERSION "OpenSSH_7.4"
。
您可以更改它,但需要重新编译。
然后通过以下方式发送:
snprintf(buf, sizeof buf, "SSH-2.0-%.100s\r\n", SSH_VERSION)
(ssh_api.c 第 381 行,在函数中_ssh_send_banner
)
也可以看看:防止 SSH 公布其版本号。
答案2
最新的 OpenSSH 版本允许通过 添加自定义文本VersionAddendum
,但不允许删除产品名称/版本。您必须为此修补源代码。