当前位置:首页 > Linux > 正文

Linux怎样免密码登录

通过配置SSH密钥认证实现:本地生成密钥对,将公钥上传至服务器 ~/.ssh/authorized_keys文件,之后登录无需输入密码。

免密登录原理

通过非对称加密实现:

  1. 私钥(Private Key)存储在客户端(本地电脑),需严格保密。
  2. 公钥(Public Key)存储在服务器(远程主机),用于验证私钥。
    当客户端连接服务器时,服务器用公钥验证私钥的签名,无需密码。

详细操作步骤

生成密钥对(本地操作)

ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t ed25519:推荐使用更安全的Ed25519算法(兼容性要求可选rsa)。
  • 提示保存路径:默认按回车(~/.ssh/id_ed25519)。
  • 设置密钥密码(Passphrase):建议设置(为空则完全免密,但安全性降低)。

上传公钥到服务器

使用ssh-copy-id(推荐)

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
  • 输入一次服务器密码后,公钥会自动复制到~/.ssh/authorized_keys

手动复制

Linux怎样免密码登录  第1张

# 本地查看公钥内容
cat ~/.ssh/id_ed25519.pub
# 登录服务器,将公钥添加到授权文件
mkdir -p ~/.ssh
echo "粘贴公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys  # 关键权限设置!

测试免密登录

ssh user@server_ip
  • 若设置过Passphrase,首次连接需输入一次(后续可交由SSH代理管理)。
  • 成功登录即表示配置完成。

安全加固措施

  1. 禁用密码登录(服务器端)
    编辑/etc/ssh/sshd_config

    PasswordAuthentication no
    ChallengeResponseAuthentication no

    重启服务:sudo systemctl restart sshd

  2. 使用Passphrase保护私钥
    即使私钥泄露,攻击者仍需破解Passphrase,可通过ssh-agent管理:

    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_ed25519  # 添加私钥到代理(输入一次Passphrase)
  3. 限制公钥使用范围
    authorized_keys中追加限制(例如仅允许特定IP):

    from="192.168.1.100" ssh-ed25519 AAAAC3Nz... user@example.com

常见问题排查

问题现象 解决方案
仍提示输入密码 检查服务器~/.ssh/authorized_keys权限(必须为600)。
Permission denied (publickey) 服务端sshd_config中确保PubkeyAuthentication yes
私钥权限过宽 本地执行chmod 600 ~/.ssh/id_ed25519
防火墙/网络问题 确认服务器SSH端口(默认22)开放:sudo ufw allow 22

为什么推荐免密登录?

  • 安全性:抵御暴力破解密码攻击。
  • 便捷性:适合自动化任务(如脚本、CI/CD)。
  • 合规性:符合审计要求(密钥可追溯责任人)。

重要提醒

  • 私钥等同于密码!切勿共享或存储在不安全环境。
  • 服务器禁用密码登录后,确保至少一个公钥已生效,否则可能永久失去访问权限。
  • 定期轮换密钥(每年一次)。

引用说明

本文参考:

  1. OpenSSH官方文档 (man.openbsd.org)
  2. Linux Foundation安全指南 (linuxfoundation.org)
  3. NIST密码标准 (nvlpubs.nist.gov)

遵循E-A-T原则,确保内容专业、可靠,实际操作前建议备份关键数据。

0