CentOS 8开启SSH密匙登录

2025年6月26日19:34:12 评论 8
首月免费体验

1、本地电脑生成密匙文件

# 登录客户端机器,执行以下命令(一路回车使用默认值)
ssh-keygen -t ed25519 -C "your_email@example.com"  # 或 RSA:-t rsa -b 4096

# 说明:
# - -t:指定密钥类型(ed25519 或 rsa)
# - -C:注释(可选,通常填写邮箱方便识别)
# - 默认保存路径:~/.ssh/id_ed25519(私钥) 和 ~/.ssh/id_ed25519.pub(公钥)

生成后的位置C:\Users\齐磊\.ssh        #齐磊这个是你当前电脑用户名

 

2. 将公钥上传到 CentOS 8 服务器

1、SSH登录服务器,执行su - root

2、创建/编辑 ~/.ssh/authorized_keys 文件

# 创建 .ssh 目录(若不存在)并设置权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh

 

3、将公钥内容追加到 authorized_keys 文件

echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys

 

4、设置 authorized_keys 文件权限(必须为 600)

chmod 600 ~/.ssh/authorized_keys

 

3. 验证权限是否正确

在服务器终端中,检查 .ssh 目录和 authorized_keys 文件的权限是否符合要求:

ls -ld ~/.ssh          # 应显示 drwx------
ls -l ~/.ssh/authorized_keys  # 应显示 -rw-------

 

 

4. 配置 SSH 服务(服务器端)​

# 服务器端执行(需 root 权限)
sudo vi /etc/ssh/sshd_config

找到并修改以下配置(若不存在则添加):

# 启用密钥认证(默认已启用,无需修改)
PubkeyAuthentication yes

# 启用密码认证(默认已启用,若被禁用需改为 yes)
PasswordAuthentication yes

# 可选:限制仅允许特定用户/组使用密码认证(按需调整)
# PasswordAuthentication yes
# AllowUsers user1 user2@ip  # 仅允许 user1 或 user2 从指定 IP 登录
# DenyGroups bad_group       # 拒绝某些组

# 其他优化(可选):
# 禁用 root 直接密码登录(增强安全,但非必须)
# PermitRootLogin prohibit-password  # root 只能通过密钥登录,不能密码登录
# 禁用旧版 SSH 协议(推荐)

保存并退出(vi 中按 ESC,输入 :wq 回车)。

 

5. 重启 SSH 服务使配置生效

sudo systemctl restart sshd  # 重启服务
sudo systemctl status sshd   # 检查服务状态(确保 Active: active (running))

 

测试密匙登录

# 客户端执行(使用私钥登录,若私钥非默认路径需用 -i 指定)
ssh -i ~/.ssh/id_ed25519 username@server_ip

# 若私钥是默认路径(~/.ssh/id_ed25519),直接执行:
ssh username@server_ip
  • 成功登录说明密钥认证已生效。

测试密码登录

# 客户端执行(输入服务器密码登录)
ssh username@server_ip
  • 输入密码后成功登录,说明密码认证仍有效。

 

 

六、常见问题排查

  • 权限错误​:若 SSH 提示“Permission denied (publickey)”,检查服务器端:
    • .ssh 目录权限必须是 700drwx------)。
    • authorized_keys 文件权限必须是 600-rw-------)。
    • 公钥内容是否完整(无多余空格或换行)。
  • SELinux 限制​:若服务器启用了 SELinux,可能需要修复上下文:
sudo restorecon -Rv ~/.ssh  # 重置 .ssh 目录的 SELinux 上下文

 

 

 

历史上的今天
6 月
26
weinxin
博主微信
这是我的微信扫一扫

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: