在 Linux 系统中,可以通过配置 SSH 免密登录来实现直接登录远程服务器而无需输入密码。以下是具体步骤:
1. 生成 SSH 密钥对
如果你还没有 SSH 密钥对,需要先生成一个。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- -t rsa:指定密钥类型为 RSA。
- -b 4096:指定密钥长度为 4096 位(更安全)。
- -C "your_email@example.com":添加注释,通常可以写你的邮箱。
执行后会提示你保存密钥的路径,默认是 ~/.ssh/id_rsa,直接按回车即可。
接着会提示你设置密钥的密码(passphrase),如果希望完全免密登录,直接按回车跳过。
2. 将公钥复制到远程服务器
使用 ssh-copy-id 命令将本地生成的公钥复制到远程服务器。
ssh-copy-id app@10.12.11.1
- 这个命令会将本地的公钥(默认是 ~/.ssh/id_rsa.pub)追加到远程服务器用户 app 的 ~/.ssh/authorized_keys 文件中。
- 如果是第一次连接远程服务器,可能会提示你确认主机的指纹信息,输入 yes 继续。
注意:如果 ssh-copy-id 命令不可用,可以手动完成以下操作:
查看本地公钥内容:
cat ~/.ssh/id_rsa.pub
登录到远程服务器:
ssh app@10.12.11.1
在远程服务器上创建 .ssh 目录(如果不存在)并设置权限:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
将本地公钥内容追加到 ~/.ssh/authorized_keys 文件中:
echo "你的公钥内容" >> ~/.ssh/authorized_keys
设置 authorized_keys 文件的权限:
chmod 600 ~/.ssh/authorized_keys
3. 测试免密登录
完成上述步骤后,尝试重新连接远程服务器:
ssh app@10.12.11.1
如果配置正确,应该可以直接登录,无需输入密码。
4. 检查和排查问题
如果仍然需要输入密码,可能是以下原因导致的:
权限问题:
- 确保远程服务器上的 .ssh 目录和 authorized_keys 文件权限正确:chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
SSH 配置文件:
- 检查远程服务器的 /etc/ssh/sshd_config 文件,确保以下配置项已启用:PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no - 修改后需要重启 SSH 服务:sudo systemctl restart sshd
日志排查:
- 查看远程服务器的 SSH 日志以获取更多信息:sudo tail -f /var/log/auth.log
通过以上步骤,你应该能够成功实现 SSH 免密登录。如果有其他问题,请随时l联系博主。
评论前必须登录!
注册