在客户端/服务器应用程序中使用 SSH
SSH 是客户端/服务器应用程序中使用的协议。服务器运行 SSH 服务器或守护进程,SSH 客户端默认安装在大多数 UNIX 和 Mac 系统以及最新版本的 Windows 上。还有其他免费和商业版本可提供附加功能,例如单独配置和保存频繁连接。PuTTY 是一种流行的免费 SSH 客户端,而 VanDyke Software 的 SecureCRT 是一种流行的商业客户端。
您可以将 SSH 用于需要与另一台设备建立安全远程连接的多项活动,例如:
- 客户端和服务器之间的安全文件复制
- 通过安全隧道重定向网络协议
- 用于远程管理的交互式命令行实用程序
使用 SSH 安全地复制文件
您可以使用安全复制协议 (SCP) 或安全文件传输协议 (SFTP) 通过 SSH 复制文件。两者都通过 TCP 22 复制文件,但使用不同的协议。SSH 处理身份验证和加密。SFTP 是 SSH 协议的扩展,需要在服务器端增加一个 SFTP 服务器。SFTP 包括更强大的命令集,如列出远程目录和删除文件,这是 SCP 无法做到的。
通过 SSH 隧道重定向网络流量以实现安全远程管理
SSH 还支持多种其他功能,例如通过已建立的 SSH 隧道封装其他网络流量的能力。例如,在创建 SSH 隧道后,您可以指示不同的应用程序(如 Web 浏览器)通过特定端口连接到本地主机。然后,系统会将后续网络调用发送到目标服务器。这允许远程连接到网络而无需在 Internet 上公开该服务。
使用 SSH 的交互式命令满足您的远程管理安全需求
SSH 提供身份验证和加密功能,使您能够配置系统以满足您的安全要求。默认情况下,SSH 配置为用于用户名和密码身份验证,但您可以添加通过其他模块(如 OATH-TOTP)提供的公钥身份验证和额外的多因素身份验证 (MFA)。事实证明,多因素身份验证比单独使用密码更能抵御网络钓鱼攻击,因为 MFA 至少需要一个除密码之外的其他因素来确认身份。
SSH 服务器配置可以在命令行、每个用户或系统范围内通过一个名为 的文件进行配置SSH_config
,该文件通常位于/etc/SSH/SSHd_config.
为用户名和密码身份验证配置 SSH 是最简单的。默认情况下,在许多设备上,您只需要在服务器上创建一个用户帐户,分配一个密码,确保安装并侦听 SSH 服务器守护程序,然后就可以开始了。
在客户端计算机上,使用以下命令远程登录到服务器:ssh username@remotehost
当您首次登录新设备时,系统会向您显示无法验证您所连接的服务器或设备的真实性的警报。这是正常的,也是一种很好的安全措施。SSH 客户端将向您显示服务器提供的主机密钥。为确保您连接的服务器是您打算连接的实际服务器(而不是欺骗或中间人),您应该确认其身份。在服务器上,使用此命令输出服务器的身份公钥:
ssh-keygen -l -f
例如:
ssh-keygen -l -f ssh_host_ecdsa_key.pub
然后,将此命令的输出与 SSH 客户端提供给您的散列值进行比较。你只需要这样做一次。SSH 客户端会将此条目保存在文件中您之前登录的所有已知主机的列表中,~/.SSH/known_hosts
并且只会在检测到不匹配时提醒您。
设置用于身份验证的证书稍微复杂一些,但是许多 Internet 站点都详细说明了所需的步骤。例如,https://ssh.com 上提供了一个非常好的演练。这些站点显示了为不同的 Linux 发行版安装和配置 SSH 和证书的细节。生成的密钥是实际凭证,与用户名和密码一样重要,应谨慎处理并妥善保护。这些证书将允许访问您的设备。
一般来说,步骤包括:
-
通过运行命令生成包含授权密钥和身份密钥的密钥对
ssh-keygen
。默认情况下,ssh-keygen
将创建一个新的身份(私有)和授权(公共)SSH 协议 2 RSA 密钥对到~/.ssh directory
. 如果您在创建 SSH 密钥时选择输入密码,则在尝试使用该密钥登录远程计算机时将需要重新输入该密码。重新输入密码是一种很好的安全措施,因为密码会加密您的私钥并防止攻击者使用它。
从客户端计算机上的命令行运行:ssh-keygen
-
将授权密钥从客户端计算机复制到服务器。使用 ssh 默认值,此密钥具有 .pub 扩展名,并且位于用户的 .ssh 目录中的身份密钥旁边。运行 ssh-keygen 生成 ssh 密钥后,在客户端计算机上运行此工具:
ssh-copy-id username@remotehost
此工具将在您的客户端计算机上查找密钥,并将登录到您指定的远程计算机并将密钥复制到(新)文件中,位于~/.ssh/authorized_keys
。
这样就以最简单的形式完成了这个过程。现在,当您登录该远程设备时,它将使用您的证书对您进行身份验证。
指定要使用的加密密码
SSH 还允许您指定要使用的加密密码。并不是所有的密码都是平等的,有些你应该避免。大多数现代 Linux 发行版默认使用可接受的加密密码,但旧设备可能不支持这些密码。要限制降级以删除不需要的密码,请编辑文件sshd_config
并指定您希望支持的密码。如果您的服务器或设备支持更高版本的 OpenSSH,您可以运行以下命令来调用扩展测试模式,这将列出许多配置选项,包括启用了哪些加密算法:
sshd -T
有关要使用的最佳对称算法、主机密钥、密钥交换和消息身份验证代码算法的当前指南,请参阅 OpenSSH 网站。美国国家标准与技术研究院 (NIST) 还提供了由于密钥长度不足或算法本身而应避免使用哪些加密算法的建议。
关键点:
SSH 是一个非常强大和有用的工具,可以连接到无数的设备。允许交互式登录的物联网设备将支持 SSH,您应该警惕在不受信任的网络上使用那些不支持的设备。
- SSH 标准包括支持对 IoT 设备和云基础设施进行安全、远程管理的工具。
- SSH 提供现代加密和身份验证控制,包括使用受密码保护的证书的多因素身份验证。
- OpenSSH 实用程序套件提供了使用 SSH 远程管理 Linux 系统和网络设备所需的所有工具。
审核编辑:汤梓红