Ubuntu系统配置SSH私钥认证

在Ubuntu系统中配置SSH私钥认证,可实现免密码登录并提升安全性

一、生成SSH密钥对

  1. 执行密钥生成命令
    终端输入以下命令(推荐RSA算法,4096位长度):

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
    • -C参数用于添加注释(如邮箱),便于标识密钥用途。
    • 系统会提示保存路径(默认~/.ssh/id_rsa),建议直接回车使用默认值。
    • 设置私钥密码(Passphrase)(可选但推荐):若担心私钥泄露,可设置额外密码保护。
  2. 查看生成的密钥文件
    生成完成后,~/.ssh目录下会出现两个文件:

    • id_rsa:私钥(需严格保密)
    • id_rsa.pub:公钥(需上传到服务器)

二、上传公钥到远程服务器

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

ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
  • 输入服务器密码后,公钥会自动追加到服务器端的~/.ssh/authorized_keys文件中。

方法2:手动复制公钥

ssh-copy-id不可用,可通过以下命令完成:

ssh user@remote_host "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
cat ~/.ssh/id_rsa.pub | ssh user@remote_host "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
  • 分步创建目录并设置权限,避免因权限问题导致认证失败。

三、配置SSH服务器

  1. 修改SSH配置文件
    登录服务器,编辑/etc/ssh/sshd_config

    sudo nano /etc/ssh/sshd_config
    

    确保以下参数已启用:

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication no  # 禁用密码登录以增强安全性
    
  2. 重启SSH服务

    sudo systemctl restart ssh
    

四、测试私钥认证登录

ssh -i ~/.ssh/id_rsa user@remote_host
  • 若未设置Passphrase,可直接登录;若设置了Passphrase,需输入私钥密码。
  • 成功登录后,说明私钥认证已生效。

五、优化操作(可选)

  1. 使用SSH Agent管理私钥

    • 启动Agent并添加私钥:
      eval "$(ssh-agent -s)"
      ssh-add ~/.ssh/id_rsa  # 输入一次Passphrase后,后续会话无需重复输入
      
    • 验证已加载的密钥:
      ssh-add -l
      
  2. 配置SSH客户端简化命令
    在本地~/.ssh/config中添加:

    Host remote_alias
        HostName remote_host_ip
        User user
        Port 2222  # 若服务器修改了SSH端口
        IdentityFile ~/.ssh/id_rsa
    

    之后可直接用ssh remote_alias连接。


注意事项

  • 权限设置:服务器端.ssh目录权限应为700authorized_keys文件权限为600
  • 备份私钥:私钥丢失将导致无法登录,建议备份至安全位置。
  • 多密钥管理:若需为不同服务器使用不同密钥,可通过-i参数指定私钥路径,或在~/.ssh/config中配置多主机规则。

通过以上步骤,实现基于密钥的安全SSH认证,既避免了密码泄露风险,又简化了登录流程。若需进一步强化安全,可结合防火墙限制SSH端口访问或启用双因素认证。

posted @ 2025-03-21 13:32  一颗xi瓜糖  阅读(481)  评论(0)    收藏  举报