一.密码认证
1.用户发起SSH连接:
用户在本地计算机上打开终端,并输入SSH命令:
ssh 用户名@主机地址
2.服务器请求密码:
服务器收到连接请求后,会提示用户输入密码。
3.用户输入密码:
密码不回显,不会显示在终端。
4.验证密码:
服务器使用用户输入的密码来验证用户的身份。如果密码正确,用户将成功登录。
5.成功登录:
如果密码验证成功,用户会看到远程系统的提示符。
二.密钥认证
它使用公钥加密技术来验证用户的身份。相比于密码认证,密钥认证更加安全且方便,因为它不需要用户每次登录时都输入密码。
1.生成密钥对:
在本地计算机上使用 ssh-keygen
命令生成一对公钥和私钥:
ssh-kengen
- 默认情况下,私钥文件名为 ~/.ssh/id_rsa,公钥文件名为~/.ssh/id_rsa.pub。
- 生成密钥对时,您还可以设置一个密码短语(passphrase)来进一步保护私钥的安全性。
1.用户发起SSH连接:
用户在本地计算机上打开终端,并输入SSH命令:
ssh 用户名@主机地址
2.服务器请求公钥:
服务器收到连接请求后,会检查用户的公钥是否存在于其授权的列表中。
3.用户提供公钥:
如果服务器中已经有了用户的公钥,那么用户就不需要做任何额外的操作。
如果服务器中没有用户的公钥,用户需要使用 ssh-copy-id
命令将公钥添加到远程服务器的 authorized_keys
文件中:
ssh-copy-id 用户名@主机地址
ssh-copy-id
命令简化了将公钥添加到远程服务器上的过程。
4.服务器验证公钥:
- 当用户发起连接时,服务器会向用户发送一条消息,要求用户用自己的私钥签名这条消息。
- 用户的SSH客户端使用私钥对消息进行签名,并将签名后的消息发送回服务器。
- 服务器使用用户的公钥来验证签名是否正确。
5.成功登录:
如果签名验证成功,用户将成功登录到远程系统。
密钥认证的工作原理
1.非对称加密:
- 密钥认证利用了非对称加密的原理,即每个用户都有一对密钥:公钥和私钥。
- 公钥可以公开,而私钥必须保密。
2.公钥验证:
- 当用户尝试通过SSH登录时,服务器会发送一条消息给用户,要求用户用自己的私钥对该消息进行签名。
- 签名过程是通过私钥完成的,而验证签名的过程是通过公钥完成的。
- 由于只有拥有私钥的人才能正确签名,服务器可以通过验证签名来确认用户的身份。
3.安全性:
- 密钥认证的安全性基于这样一个事实:私钥是保密的,而公钥是公开的。
- 如果私钥泄露,任何人都可以冒充用户,因此私钥必须妥善保管。
注意事项
1.私钥保护:
- 私钥应妥善保管,不应泄露给其他人。
- 如果私钥丢失或被泄露,应立即更换密钥对。
- 可以为私钥设置密码(称为passphrase),以增加安全性。
2.公钥分发:
- 用户需要将公钥发送到每个需要访问的远程服务器上。
- 可以手动分发公钥,也可以使用自动化脚本或工具来分发。
3.配置SSH服务:
- 在远程服务器上,需要配置SSH服务以支持密钥认证。
- 通常需要编辑
/etc/ssh/sshd_config
文件,并确保允许公钥认证:
PubkeyAuthentication yes
- 如果需要禁用密码认证以提高安全性,可以设置:
PasswordAuthentication no
总结
SSH提供了多种身份验证方法,其中密码认证是最简单的方式,但密钥认证更为安全,多因素认证则提供了最高的安全性。