SSH(Secure Shell)提供了几种不同的认证方式,其中两种最常见的方式是密码认证和密钥认证。以下是它们的详细介绍:
-
密码认证:
- 原理:用户在连接时输入用户名和密码,然后将密码传输到远程服务器进行验证。如果密码验证成功,用户将被授权访问远程服务器。
- 优点:密码认证是最简单的认证方式,用户只需记住密码即可。
- 缺点:密码需要在网络上传输,可能受到网络嗅探和中间人攻击的威胁。密码也容易受到暴力破解攻击,尤其是对于弱密码。
-
密钥认证:
- 原理:用户生成一对密钥:公钥和私钥。公钥存储在服务器上的授权文件中,而私钥存储在用户的本地计算机上。当用户尝试连接到远程服务器时,远程服务器会向用户发出挑战,要求提供与公钥相对应的私钥。如果提供的私钥与服务器上存储的公钥匹配,用户将被授权访问。
- 优点:密钥认证比密码认证更安全,因为私钥存储在用户的本地计算机上,不会发送到服务器上。这样可以避免密码在网络上传输的安全风险。
- 缺点:密钥认证需要用户生成密钥对,并在首次连接时将公钥上传到服务器上,因此可能需要一些额外的配置步骤。如果私钥丢失或泄露,安全性可能会受到影响。
除了密码认证和密钥认证之外,还有其他一些认证方式,如使用单一登录(SSO)系统、使用基于硬件的令牌、使用多因素认证等。这些认证方式通常用于增强安全性,但不如密码认证和密钥认证那样常见和广泛使用。
SSH 配置密钥认证
SSH 默认密码认证,要配置 SSH 以使用密钥认证,需要执行以下步骤:
-
生成密钥对:在本地计算机上生成密钥对(公钥和私钥)。通常使用
ssh-keygen
命令来生成密钥对。ssh-keygen -t rsa -b 4096
这将生成一个 RSA 类型的密钥对,私钥保存在
~/.ssh/id_rsa
,公钥保存在~/.ssh/id_rsa.pub
。 -
将公钥上传到远程服务器:将本地计算机上生成的公钥上传到远程服务器的
~/.ssh/authorized_keys
文件中。如果
authorized_keys
文件不存在,你可以创建它。确保设置正确的权限,只有所有者可以读写该文件。cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
替换
username
为你在远程服务器上的用户名,remote_host
为远程服务器的地址。 -
配置 SSH 服务器:确保 SSH 服务器配置允许使用密钥认证。在 SSH 服务器上打开
/etc/ssh/sshd_config
文件,并确保以下配置项启用(取消注释):PubkeyAuthentication yes
这将启用公钥认证。
-
重启 SSH 服务:重启 SSH 服务以使配置生效。
sudo systemctl restart ssh
完成上述步骤后,你应该可以使用密钥进行 SSH 认证了。连接到远程服务器时,SSH 客户端会自动尝试使用私钥进行认证,如果私钥与远程服务器上的公钥匹配,连接将成功建立。