我正在使用 OpenSSL 测试服务器连接,结果各不相同
- 服务器 A:连接成功,用户登录成功,其他命令也成功运行
- 服务器 B:连接成功,但当我尝试提交命令时,服务器没有响应。我没有收到错误,甚至没有断开连接 - 只是在我按下 Enter 或 ^M 的地方出现了一个空白行
我的直觉是,服务器 B 的配置需要不同的字符编码或其他东西,而它根本无法识别我的 Enter 键,但我一直无济于事……如能得到任何建议,我将不胜感激!
答案1
我和@UtahJarhead 一样假设你的意思是 OpenSSH。
我不太了解编码,但当得知空格、回车、空值等低端 ASCII 字符有所不同时,我会感到很惊讶。
- 检查服务器B用户的shell。你能以某种方式访问该机器和
su
该用户吗?是否会出现同样的问题? - 检查 sshd 配置。是否有任何可疑的选项,例如
ChrootDirectory
,ForceCommand
等等?比较两台服务器的 sshd 配置,看看哪些地方可疑 调试. 连接到服务器 B
ssh -vvv user@serverb
并查找 sus 输出。我的 shell 配置如下:debug2: channel 1: request shell confirm 1 debug2: callback done debug2: channel 1: open confirm rwindow 0 rmax 32768 debug2: channel_input_status_confirm: type 99 id 1 debug2: PTY allocation request accepted on channel 1 debug2: channel 1: rcvd adjust 2097152 debug2: channel_input_status_confirm: type 99 id 1 debug2: shell request accepted on channel 1
对于我来说,这是调试输出的最后几行。
如果以上任何一项都失败了——那么这些机器之间有哪些明显的不同?
答案2
事实证明我最初的怀疑是正确的……服务器根本不接受我的 Enter 命令。添加标志-crlf
解决了这个问题:
openssl s_client -connect server:port -crlf
据我所知,这会强制 s_client 工具CR/LF
在您按下 Enter 键时发送一个,而这对于基于 Windows 的服务器读取是必需的。因此,服务器 A 之所以能正常工作,可能是因为它是 *NIX 服务器,而服务器 B 是 Windows 服务器。