要使用 SSH 客户程序 ssh 和 scp,必须在后台运行服务程序(即 SSH 守护程序),用于监听 TCP/IP port 22 上的连接。 首次启动该守护程序时将生成三个密钥对。 各密钥对均由私用密钥和公钥组成。 因此,通常提到该过程,就认为它是基于公共密钥的。要保证通过 SSH 安全地通讯,必须限制只有系统管理员才能访问私用密钥文件。 文件权限是在默认安装中相应设置的。 只有在本地 SSH 守护程序才需要私用密钥,切勿将私用密钥提供给其他任何人。 公钥组件(可通过扩展名 .pub 识别)将被发送到请求连接的客户机。 所有用户都可以读取公钥组件。
连接请求是 SSH 客户机发出的。 正在等待的 SSH 守护程序将与请求连接的 SSH 客户程序交换标识数据以比较协议和软件版本,防止通过错误的端口连接。 由于请求是由最初的 SSH 守护程序的子进程回复的,所以可以同时建立多个 SSH 连接。
对于 SSH 服务器和 SSH 客户机间的通讯,OpenSSH 支持使用版本 1 和版本 2 的 SSH 协议。 默认情况下使用的是版本 2 的 SSH 协议。 用 - 1 开关可以覆盖此默认设置,转而使用该协议的版本 -1。 要在系统更新后继续使用版本 1,则请遵循 /usr/share/doc/packages/openssh/README.SuSE 中的指示信息。 本文档还介绍了如何只通过几个步骤就将 SSH 1 环境转换为有效的 SSH 2 环境。
如果使用 SSH 版本 1,服务器将发送其公共主机密钥和一个服务器密钥(由 SSH 守护程序每小时重新生成一次)。这两个密钥都允许 SSH 客户机对自由选择的会话密钥加密(会话密钥会被发送到 SSH 服务器)。 SSH 客户机还会通知服务器使用哪种加密方法(加密法)。
版本 2 的 SSH 协议不需要服务器密钥。 但服务器端和客户端都要使用符合 Diffie-Helman 的算法来交换它们的密钥。
一定要使用私用主机密钥和服务器密钥对会话密钥解密,从公钥根本无法得出这些密钥。 只有建立联系的 SSH 守护程序才能使用其私用密钥对会话密钥解密(请参见 man/usr/share/doc/packages/openssh/RFC.nroff)。 打开 SSH 客户机的冗长调试选项 -v 可以密切监视初始阶段的连接。
在与远程主机首次建立联系之后,客户机会将所有公共主机密钥储存在 ~/.ssh/known_hosts 中。 这会防止各种中间人攻击 - 外部 SSH 服务器试图使用伪造名称和伪造 IP 地址侵入系统。 如果 ~/.ssh/known_hosts 未包含某个主机密钥,或是因未能提供正确的私钥致使服务器无法对会话密钥解密,这两种情况下都可以检测到此类攻击。
建议将储存在 /etc/ssh/ 中的私用密钥和公钥备份到安全的外部位置。 这样就可以检测到密钥修改,并可以在重装后再次使用旧密钥。 用户也就无需了解那些含糊不清的警告了。如果经过校验(尽管有警告)得知这确实是正确的 SSH 服务器,则必须从 ~/.ssh/known_hosts 中删除有关此系统的现有项。