SSH的两种登录方式
Linux的SSH登录最常见的有两种方式:一种是使用密钥来进行认证;一种是使用密码进行认证。
默认认证方式
在绝大多数主流 Linux 发行版(如 Ubuntu, CentOS, Debian)的默认安装中,这两种方式是同时支持的。
当尝试连接时,SSH 客户端通常会先尝试使用私钥。如果本地存在匹配的私钥且服务器允许,则直接登录;如果私钥认证失败(或本地没有私钥),系统会回退(Fallback)到密码认证。
不过,很多云服务商(如 AWS, Google Cloud, 阿里云)提供的镜像,为了安全性,默认会禁用密码登录,强制要求使用密钥。
密钥认证
如果使用这种方式,首先,需要在客户端电脑上,检查当前用户目录的.ssh目录下是否已经存在秘钥对。如果没有,可以使用下面命令生成一对秘钥:
ssh-keygen -t rsa -b 4096执行完成后,会在.ssh目录下生成私钥 id_rsa 和公钥 id_rsa.pub。
注意:如果是现代环境(OpenSSH 6.5+,2014年后),优先用 ed25519(更快、更短、同样安全)。
然后,将 id_rsa.pub 中的内容复制到服务器的 ~/.ssh/authorized_keys 文件中。如果该文件中已经有其他公钥,那么需要另起一行,将这个公钥复制进去。各个公钥之间必须要有换行,一行一个公钥。
然后,假如服务器的ip地址为192.168.3.84。可以使用下面命令来进行登录:
ssh pi@192.168.3.84如果认证通过,即可成功登录,无需手动输入pi用户的密码。
那么,这个认证过程究竟是怎么进行的呢?
双方实际会进行如下认证过程:
- 客户端向服务器发送登录请求,并告知服务器自己拥有的公钥 ID。
- 服务器在
authorized_keys中找到对应的公钥,生成一个随机字符串(Challenge),并用公钥加密后发回给客户端。 - 客户端使用本地的私钥
解密这个字符串,再将其发回给服务器。 - 服务器验证解密后的字符串是否正确,匹配则允许登录。
这种方式虽然认证机制复杂点,但安全性更高。毕竟密码是给“人”用的,容易丢也容易被猜;密钥是给“机器”校验的,既冷酷又安全。
说完了密钥认证方式,接下来聊第二种方式,密码认证
密码认证
这种方式很好理解,就是使用给定的用户名和密码进行认证:
ssh pi@192.168.3.84当输入上面命令后,服务器会提示需要再输入pi用户的密码。如果密码正确,则允许登录;否则,则不允许登录。
注意:如果有人改动过 /etc/ssh/sshd_config 文件,需要检查PasswordAuthentication是否为no,如果设置为no,需要改成yes,然后执行 systemctl restart sshd 来让服务器的SSH服务支持密码认证方式。