Skip to content

SSH使用密钥登录服务器

目录


原理

非对称加密:这是一种单向的加密算法,它使用一对密钥,即公钥和私钥,被公钥加密的数据能且只能被私钥解密

将公钥放在服务器上,私钥放在本地,认证流程如下:

  1. 客户端 向 服务器 发起连接请求。
  2. 服务器 检查 ~/.ssh/authorized_keys 文件,找到与客户端匹配的公钥。
  3. 服务器 生成一个随机字符串,并用客户端的 公钥 进行加密,发送给客户端
  4. 客户端 使用 私钥 解密,得到原始随机字符串。
  5. 客户端 计算哈希值并发送给服务器。
  6. 服务器 验证哈希值是否匹配,如果匹配,则认证通过,免密登录成功。

使用

  • 公私钥生成的地方没有限制,但是
    • 公钥需要放置在服务器上的某个地方,一般放在 ~/.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 位

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1