轻松配置Linux免密码登录SSH:安全高效的详细指南

一般服务器密码都会设置成非人类可记的,如果每次登陆都要查找该密码则会非常麻烦还浪费时间。在这篇指南中,我们将逐步介绍如何在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)以及是否为其设置密码短语。但也可以不作任何输入,再按多次回车。

2. 将公钥复制到远程服务器

使用ssh-copy-id命令,将公钥复制到远程服务器:

ssh-copy-id user@remote_host

替换user为您在远程服务器上的用户名,remote_host为远程服务器的IP地址或域名。

如果ssh-copy-id命令不可用,可以手动复制公钥:

cat ~/.ssh/id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

注意:手动复制很容易出错,建议使用ssh-copy-id,简单方便。

3. 设置正确的权限

在远程服务器上,确保SSH相关文件和目录具有正确的权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4. 配置SSH服务器

编辑远程服务器上的SSH配置文件:

sudo nano /etc/ssh/sshd_config

查看该文件,确保以下设置已启用,如果已经启动则无需理会:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

5. 禁用密码认证(可选但推荐)

为了提高安全性,可以禁用密码认证。在同一个配置(第4步)文件中,找到并修改:

PasswordAuthentication no

6. 重启SSH服务

保存更改后,重启SSH服务以使配置生效:

使用systemd的系统:

sudo systemctl restart sshd

使用SysV init的系统:

sudo service ssh restart

7. 测试免密码登录

现在,你在本地应该能够无需密码登录到远程服务器:

ssh user@remote_host

故障排除

如果遇到问题,请检查以下几点:

  1. 确保您的本地公钥(~/.ssh/id_rsa.pub)内容已正确添加到远程服务器的~/.ssh/authorized_keys文件中。
  2. 检查远程服务器上~/.ssh~/.ssh/authorized_keys的权限是否正确。
  3. 查看远程服务器上的/var/log/auth.log文件,寻找可能的错误信息。

安全提示

  • 定期更新您的SSH密钥。
  • 使用强密码短语保护您的私钥。
  • 考虑使用SSH密钥认证结合双因素认证,以获得更高的安全性。