CentOS7 配置密钥免密码登录

一、准备 .ssh 目录(服务器端)

如果服务器上用户的家目录下不存在 .ssh 目录,需要先创建它,并设置正确的权限。SSH 服务要求 .ssh 目录的权限为 700,否则会拒绝公钥认证。

1
2
3
4
5
6
7
cd ~

# 若 .ssh 目录不存在则创建
[ ! -d .ssh ] && mkdir .ssh

# 设置权限为 700,确保只有属主有权访问
chmod 700 ~/.ssh

二、生成 SSH 密钥对(客户端)

在你的本地计算机(客户端)上执行以下操作。

1. 检查或生成密钥

首先检查本地是否已有 SSH 密钥。如果 ~/.ssh/id_rsa 文件不存在,则生成一个新的 4096 位 RSA 密钥对。

1
2
3
4
# 如果 RSA 私钥不存在,则创建一个新的
if [ ! -f ~/.ssh/id_rsa ]; then
ssh-keygen -t rsa -b 4096 -C "[email protected]"
fi

执行后,你的 ~/.ssh 目录下会生成两个文件:

文件名 描述
id_rsa 私钥(必须妥善保管)
id_rsa.pub 公钥(可以安全分发)

2. 查看并复制公钥

查看并复制公钥文件的内容,准备将其上传到服务器。

1
cat ~/.ssh/id_rsa.pub

三、配置服务器端

1. 将公钥写入 authorized_keys

登录服务器,将刚刚复制的客户端公钥内容追加到 ~/.ssh/authorized_keys 文件中。

1
2
3
4
5
6
7
8
cd ~/.ssh

# 将公钥内容追加到 authorized_keys 文件
# 注意:请将 "粘贴你本地 id_rsa.pub 的内容" 替换为实际的公钥字符串
echo "粘贴你本地 id_rsa.pub 的内容" >> ~/.ssh/authorized_keys

# 设置 authorized_keys 文件的权限为 600
chmod 600 authorized_keys

重要提示:authorized_keys 文件的权限必须是 600,否则 SSH 服务会因权限过于开放而拒绝认证。

2. 配置 SSH 服务

编辑 SSH 服务的配置文件 /etc/ssh/sshd_config,以启用公钥认证并增强安全性。

1
sudo vim /etc/ssh/sshd_config

建议修改或确认以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 开启公钥认证
PubkeyAuthentication yes

# 指定存放公钥的文件路径
AuthorizedKeysFile .ssh/authorized_keys

# (推荐)禁用密码登录,强制使用密钥
# PasswordAuthentication无效的话 查看/etc/ssh/sshd_config.d 目录下是否有.conf文件覆盖配置
PasswordAuthentication no

# (可选,但推荐)禁止 root 用户直接登录
PermitRootLogin no

# 确保 SSH 使用 v2 协议
Protocol 2

# 开启严格模式,检查目录和文件的所有权和权限
StrictModes yes

修改配置后,重启 SSH 服务使之生效。

1
sudo systemctl restart sshd

四、总结

通过以上步骤,你可以实现安全、免密登录 CentOS 7 服务器。核心要点包括:

  • 权限设置:确保 .ssh 目录权限为 700,authorized_keys 文件权限为 600。
  • 密钥分离:私钥 (id_rsa) 绝不泄露,公钥 (id_rsa.pub) 用于分发。
  • 服务配置:在 sshd_config 中开启公钥认证并禁用密码登录,提升系统安全性。
  • 服务重启:修改配置后务必重启 sshd 服务。