关于 ssh 免密登录,还是直接总结一个清晰一点的教程比较好。
# ssh 免密登录原理
ssh 免密登录的原理是,客户端生成一对公私钥,将公钥上传到服务器,然后客户端在登录时,使用私钥对登录信息进行加密,服务器收到加密信息后,使用公钥进行解密,如果解密成功,则登录成功。因此,其需要在登录时,要求客户端可以自动检测到私钥的位置并进行匹配。
# 公私钥生成
首先要在客户端生成一个公私钥对,使用命令:
ssh-keygen -t rsa |
随后会弹出键入文件名的命令,默认文件名为 ~/.ssh/id_rsa
和 ~/.ssh/id_rsa.pub
. 如果希望生成特殊文件名,可以选择修改。需要注意,这里键入的文件名需要包含路径,如果仅键入文件名,则会将公私钥对创建在 powershell 打开的文件目录下。
随后会要求输入 passphrase. 该 passphrase 是保护私钥的密码。当后续使用私钥时,需要输入该密码。
# 公钥上传
随后需要将公钥上传到服务器,使用命令:
mkdir ~/.ssh | |
echo "ssh-rsa xxx" >> ~/.ssh/authorized_keys |
其中, xxx
是公钥的内容。需要注意的是,在 Windows 平台上生成的公钥后续可能会包含主机名,在执行 echo "ssh-rsa xxx"
时,需要将主机名删除。
# 将私钥添加到 SSH 代理
如果需要在登入远程机时,自动检测私钥的位置并进行匹配,需要将私钥添加到 SSH 代理中。使用命令:
ssh-add ~/.ssh/id_rsa |
在执行该命令时,需要依据命令行提示,输入 passphrase.
# for Windows
在 Windows 系统中,该命令可能弹出错误
Could not open a connection to your authentication agent. |
则需要先启动 SSH 代理,使用命令:
eval `ssh-agent -s` |
需要注意,该命令需要在 powershell 中执行而非使用 git bash 命令执行,否则无法正常工作。
# for macOS
在 macOS 中,该命令一般不会弹出错误。但是在重启电脑后,仍然需要输入密码,即 ssh-add
命令重启后失效。这是因为 macOS 的 ssh-add
命令和 ssh-agent
都是一个进程,当电脑重启后,进程会消失,因此需要重新启动 ssh-add
.
这里,只需要将 ssh-add
加入到开机启动项中即可。此外,为了不使私钥 passphrase 明文暴露,需要将 passphrase 存储到 macOS 钥匙串中。使用命令:
echo "ssh-add --apple-use-keychain ~/.ssh/id_rsa" >> ~/.zshrc |
即可。