开发者

Linux中设置SSH免密码(密钥)登录的具体步骤

目录
  • 1. 基本原理
  • 2. 具体步骤
    • 2.1 在客户端生成 SSH 密钥对
    • 2.2 将公钥复制到目标服务器
    • 2.3 测试免密码登录
    • 2.4 (可选)配置 SSH 客户端
  • 3. 防火墙与 SSH 配置
    • 4. 常见问题排查
      • 5. AI 开发相关场景
        • 6. 安全注意事项

          1. 基本原理

          SSH 免密码登录通过公钥认证实现:

          • 在客户端生成一对密钥(公钥和私钥)。
          • 将公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。
          • 客户端使用私钥登录,无需输入密码。

          2. 具体步骤

          2.1 在客户端生成 SSH 密钥对

          检查是否已有密钥

          在客户端(你的本地机器或跳板机)上,检查是否已有 SSH 密钥:

          ls -l ~/.ssh/
          

          如果存在 id_rsa(私钥)和 id_rsa.pub(公钥),可以跳到步骤 2.2。

          生成密钥对

          使用 ssh-keygen 生成 RSA 或 ED25519 密钥(推荐 ED25519,安全性更高):

          ssh-keygen -t ed25519 -C "your_email@example.com"
          

          或使用 RSA(旧系统可能不支持 ED25519):

          ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
          
          • 按 Enter 接受默认文件路径(~/.ssh/id_ed25519~/.ssh/id_rsa)。
          • 可设置密码保护私钥(为空则无密码,推荐为空以实现完全免密)。
          • 执行后会生成:
            • ~/.ssh/id_ed25519~/.ssh/id_rsa(私钥)
            • ~/.ssh/id_ed25519.pub~/.ssh/id_rsa.pub(公钥)

          2.2 将公钥复制到目标服务器

          将客户端的公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。

          使用 ssh-copy-id(推荐,简单)

          ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
          
          • 替换 user 为目标服务器的用户名,remote_host 为服务器 IP 或域名。
          • 输入目标服务器密码,公钥会自动添加到 ~/.ssh/authorized_keys

          手动复制(如果 ssh-copy-id 不可用)

          • 在客户端查看公钥内容:
          cat ~/.ssh/id_ed25519.pub
          
          • 复制输出内容(类似 ssh-ed25519 AAAAC3... your_email@example.com)。
          • 登录目标服务器,编辑 authorized_keys
          ssh user@remote_host
          mkdir -p ~/.ssh
          echo "your_public_key" >> ~/.ssh/authorized_keys
          
          • 确保权限正确:
          chmod 700 ~/.ssh
          chmod 600 ~/.ssh/authorized_keys
          

          2.3 测试免密码登录

          在客户端尝试登录:

          ssh user@remote_host
          

          如果配置正确,将无需输入密码直接登录。

          2.4 (可选)配置 SSH 客户端

          为方便管理,可以在客户端的 ~/.ssh/config 文件中添加配置:

          # 编辑配置文件
          nano ~/.ssh/config
          

          添加以下内容:

          Host alias_name
              HostName remote_host
              User user
              IdentityFile ~/.ssh/id_ed25519
          
          • alias_name:自定义别名,如 myserver
          • 保存后,使用 ssh alias_name 即可登录。

          3. 防火墙与 SSH 配置

          确保目标服务器的防火墙允许 SSH 连接(默认端口 22):

          使用 firewalld

          sudo firewall-cmd --zone=public --add-service=ssh --permanent
          sudo firewall编程客栈-cmd --reload
          

          使用 iptables

          sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
          sudo iptables-save > /etc/sysconfig/iptables
          

          使用 ufw(Ubuntu):

          sudo ufw allow ssh
          

          4. 常见问题排查

          无法免密登录

          检查服务器端 SSH 配置(/etc/ssh/sshd_configPrnirIJLV):

          sudo nano /etc/ssh/sshd_config
          

          确保以下配置启用:

          PubkeyAuthentication yes
          AuthorizedKeysFile .ssh/authorized_keys
          

          重启 SSH 服务:

          sudo systemctl restart sshd
          

          检查 ~/.ssh/authorized_keys 文件权限(必须为 600):

          ls -l ~/.ssh/authorized_keys
          chmod 600 ~/.ssh/authorized_keys
          

          检查客户端私钥权限:

          chmod 600 ~/.ssh/id_ed25519
          

          SElinux 限制(Centos/RHEL)

          如果 SELinux 启用,可能阻止 SSH 登录:

          sudo setsebool -P ssh_keysign on
          sudo restorecon -R -v ~/.ssh
          

          连接被拒绝

          • 确认服务器 SSH 服务运行:
          sudo systemctl status sshd
          
          • 检查防火墙是否开放 22 端口:
          sudo firewall-cmd --list-ports
          
          • 测试端口连通性:
          nc -zv remote_hos编程t 22
          

          公钥格式错误

          确保公钥是一行完整内容,复制时不要引入换行符。

          5. AI 开发相关场景

          在 AI 开发中,免密码登录常用于:

          • 远程访问 GPU 服务器:配置 jsJupyter Notebook 或 TensorFlow Serving 的远程访问。
          • 自动化脚本:如批量部署模型训练任务,需在多台机器间免密传输文件(scprsync)。
          • docker 集群:在多节点集群中配置 SSH 免密登录以便管理。

          示例:在客户端配置 scp 免密传输:

          scp dataset.tar.gz user@remote_host:/path/to/destination
          

          6. 安全注意事项

          • 保护私钥:不要泄露 ~/.ssh/id_rsa~/.ssh/id_ed25519,确保文件权限为 600。

          限制公钥访问:在 authorijavascriptzed_keys 中可添加限制,如:

          from="192.168.1.100" ssh-ed25519 AAAAC3... your_email@example.com
          

          仅允许特定 IP 使用该公钥登录。

          禁用密码登录:为提高安全性,可在 /etc/ssh/sshd_config 中设置:

          PasswordAuthentication no
          

          然后重启 sshd

          sudo systemctl restart sshd
          

          以上就是Linux中设置SSH免密码(密钥)登录的具体步骤的详细内容,更多关于Linux SSH免密码登录的资料请关注编程客栈(www.devze.com)其它相关文章!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新运维

          运维排行榜