共计 1554 个字符,预计需要花费 4 分钟才能阅读完成。
导读 | 我想到 SSH 存在 1 和 2 两个版本(SSH1 和 SSH2)。这两者之间有什么不同?还有我该怎么在 Linux 上检查 SSH 协议的版本? |
安全 Shell(SSH)通过加密的安全通信通道来远程登录或者远程执行命令。SSH 被设计来替代不安全的明文协议,如 telnet、rsh 和 rlogin。SSH 提供了大量需要的特性,如认证、加密、数据完整性、授权和转发 / 通道。
SSH 协议规范存在一些小版本的差异,但是有两个主要的大版本:SSH1 (版本号 1.XX) 和 SSH2 (版本号 2.00)。
事实上,SSH1 和 SSH2 是两个完全不同互不兼容的协议。SSH2 明显地提升了 SSH1 中的很多方面。首先,SSH 是宏设计,几个不同的功能(如:认证、传输、连接)被打包进一个单一的协议,SSH2 带来了比 SSH1 更强大的安全特性,如基于 MAC 的完整性检查,灵活的会话密钥更新、充分协商的加密算法、公钥证书等等。
SSH2 由 IETF 标准化,且它的实现在业界被广泛部署和接受。由于 SSH2 对于 SSH1 的流行和加密优势,许多产品对 SSH1 放弃了支持。在写这篇文章的时候,OpenSSH 仍旧支持 SSH1 和 SSH2,然而在所有的现代 Linux 发行版中,OpenSSH 服务器默认禁用了 SSH1。
如果你想检查本地 OpenSSH 服务器支持的 SSH 协议版本,你可以参考 /etc/ssh/sshd_config 这个文件。用文本编辑器打开 /etc/ssh/sshd_config,并且查看 ”Protocol” 字段。
如果如下显示,就代表服务器只支持 SSH2。
Protocol 2
如果如下显示,就代表服务器同时支持 SSH1 和 SSH2。
Protocol 1
如果因为 OpenSSH 服务其运行在远端服务器上而你不能访问 /etc/ssh/sshd_config。你可以使用叫 ssh 的 SSH 客户端来检查支持的协议。具体说来,就是强制 ssh 使用特定的 SSH 协议,接着我么查看 SSH 服务器的响应。
下面的命令强制 ssh 使用 SSH1:
ssh -1 user@remote_server
下面的命令强制 ssh 使用 SSH2:
ssh -2 user@remote_server
如果远程 SSH 服务器只支持 SSH2, 那么第一个带“-1”的选项就会出现像下面的错误信息:
Protocol major versions differ: 1 vs. 2
如果 SSH 服务器同时支持 SSH1 和 SSH2, 那么两个命令都有效。
另一个检查版本的方法是运行 SSH 扫描工具,叫做 scanssh。这个命令行工具在你想要检查一组 IP 地址或者整个本地网络来升级 SSH1 兼容的 SSH 服务器时很有用。
下面是基本的 SSH 版本扫描语法。
sudo scanssh -s ssh -n [ports] [IP addresses or CIDR prefix]
“-n” 选项可以指定扫描的 SSH 端口。你可以用都好分隔来扫描多个端口,不带这个选项,scanssh 会默认扫描 22 端口。
使用下面的命令来发现 192.168.1.0/24 本地网络中的 SSH 服务器,并检查 SSH 协议 v 版本:
sudo scan -s ssh 192.168.1.0/24
如果 scanssh 为特定 IP 地址报告“SSH-1.XX-XXXX”,这暗示着相关的 SSH 服务器支持的最低版本是 SSH1. 如果远程服务器只支持 SSH2,scanssh 会显示“SSH-2.0-XXXX”。
via: http://ask.xmodulo.com/check-ssh-protocol-version-linux.html
译者:geekpi 校对:wxy
本文由 LCTT 原创编译,Linux 中国 荣誉推出