这是课上讲的内容,用ssh做验证免密登录的挺多的,github就是
SSH(Secure Shell)免密登录是一种通过公钥加密技术实现的安全登录方式,允许用户在不输入密码的情况下登录到远程服务器。其原理主要涉及公钥和私钥的生成、分发和验证过程。以下是SSH免密登录的详细原理:
首先,用户需要在本地机器上生成一对公钥和私钥。这个过程通常使用ssh-keygen
命令完成。
bashssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
:指定使用RSA算法生成密钥对。-b 4096
:指定密钥长度为4096位,增加安全性。-C "your_email@example.com"
:添加注释,通常是用户的电子邮件地址。执行上述命令后,系统会提示用户输入密钥的存储路径和密码(可选)。默认情况下,生成的密钥对会存储在~/.ssh/
目录下:
~/.ssh/id_rsa
:私钥文件,必须保密。~/.ssh/id_rsa.pub
:公钥文件,可以公开。接下来,用户需要将生成的公钥文件(id_rsa.pub
)的内容复制到远程服务器的~/.ssh/authorized_keys
文件中。这个过程可以通过多种方式完成,最常见的是使用ssh-copy-id
命令。
bashssh-copy-id user@remote_host
执行上述命令后,系统会提示用户输入远程服务器的密码。ssh-copy-id
会将本地公钥文件的内容追加到远程服务器的~/.ssh/authorized_keys
文件中。
在本地机器上,用户需要确保SSH客户端配置正确。通常情况下,SSH客户端会自动使用~/.ssh/id_rsa
作为私钥文件。如果需要指定其他私钥文件,可以在~/.ssh/config
文件中进行配置。
bashHost remote_host HostName remote_host User user IdentityFile ~/.ssh/id_rsa
当用户尝试通过SSH登录到远程服务器时,以下步骤会自动进行:
客户端发起连接请求:用户在本地机器上执行ssh user@remote_host
命令,SSH客户端会向远程服务器发起连接请求。
服务器发送随机字符串:远程服务器接收到连接请求后,会生成一个随机字符串,并使用用户的公钥对其进行加密,然后将加密后的字符串发送给客户端。
客户端使用私钥解密:客户端接收到加密后的字符串后,使用本地存储的私钥对其进行解密,得到原始的随机字符串。
客户端发送解密后的字符串:客户端将解密后的随机字符串发送回远程服务器。
服务器验证:远程服务器接收到客户端发送的解密后的字符串后,会与之前生成的随机字符串进行比对。如果两者一致,说明客户端拥有与公钥对应的私钥,验证通过,允许用户登录。
总结就是,通过非对称加密生成一对密钥,把公钥给需要连接的服务器,私钥在本地,本地像远程服务器发起登录请求,对方会检查是否有对应的公钥有的话随机生成一段数据加密发过去,完成握手
上面是具体流程,很清晰
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!