欢迎光临
我们一直在努力

如何配置SSH密钥登录?

SSH密钥登录:告别密码,开启安全高效的服务器访问新方式

在管理和维护远程服务器时,安全性是首要考量。传统的用户名密码登录方式不仅存在被暴力破解的风险,每次输入也略显繁琐。SSH密钥对认证作为一种更安全、更便捷的替代方案,正成为开发者和系统管理员的首选。本文将详细介绍如何从零开始配置SSH密钥登录,助您打造一道坚固的服务器访问防线。

一、SSH密钥登录原理简介

SSH密钥认证采用非对称加密体系。它需要一对密钥:私钥公钥。私钥由用户本地严格保密,犹如一把独一无二的物理钥匙;公钥则可以放心地放置在目标服务器上,相当于一个公开的锁芯。当您尝试连接时,服务器会用公钥“锁”创建一个挑战,只有能使用对应私钥“钥匙”正确应答的客户端才能通过验证。这种方法从根本上杜绝了密码在网络上传输可能带来的截获风险,并且几乎无法被暴力破解。

二、本地生成SSH密钥对

配置的第一步是在您的本地计算机上生成密钥对。这个过程在所有主流操作系统上都类似。

  1. 打开终端(Linux/macOS)或PowerShell/Git Bash(Windows)
  2. 执行生成命令:输入以下命令:
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • -t rsa:指定密钥类型为RSA,也可使用 ed25519(更现代高效)。
    • -b 4096:指定密钥长度为4096位,安全性更高。
    • -C:添加一个注释,通常用邮箱标识密钥所有者。
  3. 设置保存路径和口令
    • 程序会提示您选择密钥文件的保存路径,直接按回车使用默认路径(通常是 ~/.ssh/id_rsa)。
    • 接着会询问是否设置密钥口令(passphrase)。强烈建议设置。这为您的私钥额外增加了一层密码保护,即使私钥文件意外泄露,他人也无法直接使用。

成功后,您会在 ~/.ssh/ 目录下得到两个文件:id_rsa(私钥,务必保密)和 id_rsa.pub(公钥,用于配置到服务器)。

三、将公钥部署到远程服务器

接下来,需要将公钥“安装”到您想登录的服务器上。

  1. 登录服务器:暂时使用您原有的密码登录方式连接到服务器。
    ssh username@your_server_ip
  2. 确保SSH目录存在:登录后,检查或创建 ~/.ssh 目录,并设置正确的权限。
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
  3. 上传公钥:这里有两种常用方法:
    • 方法A:手动追加:将您本地 id_rsa.pub 文件的内容,复制并追加到服务器上的 ~/.ssh/authorized_keys 文件末尾。
      echo "粘贴您的公钥内容" >> ~/.ssh/authorized_keys
    • 方法B:使用 ssh-copy-id 工具(推荐):在本地终端执行,一键完成。
      ssh-copy-id -i ~/.ssh/id_rsa.pub username@your_server_ip

      系统会提示输入一次服务器密码,之后公钥就会自动部署到位。

  4. 设置关键文件权限:这是避免连接失败的重要一步。
    chmod 600 ~/.ssh/authorized_keys

四、配置SSH服务端以启用密钥登录并增强安全

公钥部署后,建议对服务器的SSH配置进行优化,在启用密钥登录的同时,关闭密码登录以提升安全。

  1. 编辑SSH服务端配置文件
    sudo nano /etc/ssh/sshd_config
  2. 找到并修改以下关键参数
    PubkeyAuthentication yes        # 确保公钥认证开启
    AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(默认)
    PasswordAuthentication no       # 禁用密码认证(确认密钥登录成功后再修改!)
    PermitRootLogin prohibit-password # 禁止root直接密码登录,若用密钥可改为'no'
  3. 保存并重启SSH服务
    sudo systemctl restart sshd   # 对于使用systemctl的系统
    # 或 sudo service ssh restart
  4. 重要提示:在将 PasswordAuthentication 设为 no 之前,请务必打开一个新的终端窗口,测试使用密钥登录是否成功。确保密钥登录无误,否则可能将自己锁在服务器门外。

五、本地连接测试与客户端配置技巧

完成服务端配置后,在本地直接使用以下命令连接,系统将自动使用私钥进行认证:

ssh username@your_server_ip

如果设置了密钥口令,首次连接时会提示输入。

客户端优化技巧

  • 使用SSH Agent管理口令:可以避免每次连接都输入密钥口令。
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa
  • 创建配置文件:在本地 ~/.ssh/config 文件中为服务器创建别名,简化连接命令。
    Host myserver
        HostName your_server_ip
        User username
        IdentityFile ~/.ssh/id_rsa
        Port 22

    配置后,只需输入 ssh myserver 即可连接。

六、故障排查与安全建议

  • 连接被拒绝:检查服务器SSH服务是否运行;检查本地和服务器上的文件权限(.ssh目录应为700,authorized_keys文件应为600)。
  • 仍要求输入密码:确认公钥已正确复制到服务器的 authorized_keys 文件中,且没有多余空格或换行;确认服务器 sshd_configPubkeyAuthentication 设置为 yes
  • 终极安全建议
    • 为私钥设置强口令。
    • 完全禁用密码登录后,考虑更改SSH默认端口(22)。
    • 使用类似Fail2ban的工具防范暴力破解尝试。
    • 定期审核服务器上的授权密钥列表,移除不再使用的公钥。

通过以上步骤,您已经成功配置了比密码安全得多的SSH密钥登录。它不仅提升了服务器的安全基线,也为自动化脚本、Git操作等场景提供了无缝认证体验。花一点时间完成此设置,是每位服务器管理者值得投入的安全投资。

赞(0)
未经允许不得转载:莱卡云 » 如何配置SSH密钥登录?