SSH 通过密钥登录服务器

要通过 SSH 密钥登录服务器,需要先生成一对密钥(公钥和私钥),然后将公钥部署到服务器上。

1. 生成密钥对

使用以下命令生成一对 SSH 密钥。推荐使用 ed25519 算法,它更安全且性能更好。

ssh-keygen -t ed25519 -C "注释" -f ~/.ssh/id_ed25519

命令参数说明:

执行命令后,会提示设置一个密码短语

  • 设置密码短语可以为私钥增加一层额外的安全保护。即使私钥文件泄露,攻击者仍需此密码才能使用。
  • 也可以直接按回车留空,这样登录时无需输入密码,更便捷,但安全性会降低。

2. 添加公钥到服务器

方法一:使用 ssh-copy-id(推荐)

这是最简单、最安全的方法,它会自动处理文件权限。

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@example.com

命令参数说明:

方法二:手动部署

在某些环境下(例如部分 Windows 系统),可能没有 ssh-copy-id 命令。此时可以手动进行部署:

  1. 登录服务器

    ssh user@example.com
  2. 创建 .ssh 目录(如果尚不存在):

    mkdir -p ~/.ssh
  3. 将公钥内容追加到 authorized_keys 文件

    首先,在本地机器上查看并复制公钥内容:

    cat ~/.ssh/id_ed25519.pub

    然后,在服务器上,将复制的内容追加到 authorized_keys 文件中:

    echo "你的公钥内容" >> ~/.ssh/authorized_keys
  4. 设置正确的文件权限(非常重要!):

    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    • 600 权限确保只有文件所有者可以读写 authorized_keys
    • 700 权限确保只有文件所有者可以访问、读取、写入和执行 .ssh 目录。

注意:如果权限设置不正确,SSH 服务会出于安全考虑而忽略你的密钥。

3. 配置 SSH 服务

确保服务器端的 SSH 服务允许密钥登录。编辑 SSH 配置文件:

nano -w /etc/ssh/sshd_config

找到并确保以下选项设置为 yes(通常默认就是):

PubkeyAuthentication yes

(可选)为了提高安全性,在确认密钥登录正常工作后,可以禁用密码登录:

PasswordAuthentication no

警告:在禁用密码登录前,务必确保你的密钥登录已经成功配置并且可以正常使用!否则你可能会被锁定在服务器之外。
完成修改后,保存文件并重启 SSH 服务以使配置生效:

systemctl restart sshd