SSH使用密钥登录服务器
目录
原理
非对称加密:这是一种单向的加密算法,它使用一对密钥,即公钥和私钥,被公钥加密的数据能且只能被私钥解密。
将公钥放在服务器上,私钥放在本地,认证流程如下:
- 客户端 向 服务器 发起连接请求。
- 服务器 检查 ~/.ssh/authorized_keys 文件,找到与客户端匹配的公钥。
- 服务器 生成一个随机字符串,并用客户端的 公钥 进行加密,发送给客户端
- 客户端 使用 私钥 解密,得到原始随机字符串。
- 客户端 计算哈希值并发送给服务器。
- 服务器 验证哈希值是否匹配,如果匹配,则认证通过,免密登录成功。
使用
- 公私钥生成的地方没有限制,但是
- 公钥需要放置在服务器上的某个地方,一般放在
~/.ssh/authorized_keys文件中- 私钥需要放置在客户端的某个地方,一般放在
~/.ssh/id_rsa文件中- 确保私钥不被泄漏
- 公钥可以复制到多个服务器
~/.ssh/authorized_keys文件中的内容是可以登录到服务器的公钥,每行一个公钥
私钥保存在本地~/.ssh文件夹中
生成密钥对:
bash
ssh-keygen -t rsa -C "username@host"username@host是一串表示符,给用户自己看的,随便写什么都可以- rsa 是加密算法,可以选择其他的加密算法
另外,请确保权限正确,否则可能导致无法登录
bash
chown -R $USER:$USER ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys如果有问题,修改服务器的/etc/ssh/sshd_config文件,确保如下配置正确
bash
# 允许使用密钥登录
RSAAuthentication yes
# 允许使用公钥登录
PubkeyAuthentication yes
# 允许 root 登录
PermitRootLogin yes当一切配置好之后,如果你想禁止密码登陆,请修改/etc/ssh/sshd_config
bash
PasswordAuthentication no参考资料:Linux 系列 | SSH 如何使用密钥登录服务器
番外:使用密钥登录 GitLab
使用 gitLab 时,不建议使用 rsa 算法加密,否则可能导致鉴权失败
因为 gitlab 要求 rsa 生成的密钥至少 2048 位
