返回文章列表
网络安全

如何配置Linux云服务器仅允许SSH证书登录?

筱筱
2026-01-28
6天前
如何配置Linux云服务器仅允许SSH证书登录?

本文档详细说明了如何配置Linux云服务器仅允许SSH证书登录,禁止密码登录,以提高服务器安全性。


目录

  1. 1. 前置条件
  2. 2. 第一步:生成SSH密钥对
  3. 3. 第二步:将公钥添加到云服务器
  4. 4. 第三步:修改SSH配置禁用密码登录
  5. 5. 第四步:重启SSH服务并测试
  6. 6. 后续使用方法
  7. 7. 常用管理命令
  8. 8. 故障排除


前置条件

客户端(Windows)

  • • 已安装OpenSSH客户端(Windows 10/11默认已安装)
  • • 有PowerShell访问权限
  • • 有服务器root权限或sudo权限

服务端(Linux)

  • • 已安装OpenSSH服务器
  • • 有root权限或sudo权限
  • • 当前可以通过密码登录


第一步:生成SSH密钥对

方法一:使用ssh-keygen生成新密钥(推荐)

在Windows PowerShell中执行:

# 生成4096位RSA密钥对ssh-keygen -t rsa -b 4096 -f "$env:USERPROFILE\.ssh\id_rsa_server" -C "admin@server"

参数说明:

  • • -t rsa:使用RSA算法
  • • -b 4096:密钥长度为4096位(更安全)
  • • -f:指定密钥文件路径
  • • -C:添加注释(通常是邮箱)

执行后会提示:

Enter passphrase (empty for no passphrase): 

建议:

  • • 可以设置密码短语(passphrase)以提高安全性
  • • 如果不需要,直接按Enter跳过

方法二:使用现有密钥

如果您已经有SSH密钥,可以跳过此步骤,直接使用现有密钥。

生成的文件

生成后会创建两个文件:

  • • 私钥:C:\Users\YourUsername\.ssh\id_rsa_server
  • • 公钥:C:\Users\YourUsername\.ssh\id_rsa_server.pub

⚠️ 重要提示:

  • • 私钥文件必须妥善保管,不要泄露
  • • 公钥文件可以公开,需要添加到服务器


第二步:将公钥添加到云服务器

方法一:使用ssh-copy-id(推荐,Linux客户端)

ssh-copy-id -i ~/.ssh/id_rsa_server.pub root@服务器IP

方法二:手动添加(Windows客户端)

2.1 查看公钥内容

Get-Content "$env:USERPROFILE\.ssh\id_rsa_server.pub"

2.2 登录到服务器

$env:Path += ";$env:SystemRoot\System32\OpenSSH"ssh root@服务器IP

2.3 创建.ssh目录(如果不存在)

mkdir -p ~/.sshchmod 700 ~/.ssh

2.4 添加公钥到authorized_keys

echo "您的公钥内容" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys

2.5 验证公钥已添加

cat ~/.ssh/authorized_keys

方法三:使用PowerShell命令(推荐)

# 一次性完成公钥添加$env:Path += ";$env:SystemRoot\System32\OpenSSH"$publicKey = Get-Content "$env:USERPROFILE\.ssh\id_rsa_server.pub"ssh root@服务器IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '$publicKey' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

测试证书登录

ssh -i "$env:USERPROFILE\.ssh\id_rsa_server" root@服务器IP

如果可以成功登录,说明公钥配置正确!


第三步:修改SSH配置禁用密码登录

3.1 备份SSH配置文件

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

3.2 修改SSH配置文件

方法一:使用sed命令(推荐)

# 禁用密码登录sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_configsed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config# 启用公钥认证echo 'PubkeyAuthentication yes' >> /etc/ssh/sshd_config

方法二:使用vim编辑器

vim /etc/ssh/sshd_config

找到并修改以下配置项:

# 禁用密码登录PasswordAuthentication no# 启用公钥认证PubkeyAuthentication yes# 确保以下配置(可选,提高安全性)PermitRootLogin prohibit-password

保存并退出:

  • • 按 Esc 键
  • • 输入 :wq
  • • 按 Enter 键

3.3 验证配置

grep -E '(PasswordAuthentication|PubkeyAuthentication)' /etc/ssh/sshd_config

预期输出:

PasswordAuthentication noPubkeyAuthentication yes


第四步:重启SSH服务并测试

4.1 重启SSH服务

systemctl restart sshd

4.2 检查SSH服务状态

systemctl status sshd

预期输出:

● sshd.service - OpenSSH server daemon   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)   Active: active (running) since ...

4.3 测试证书登录

保持当前SSH连接不要断开!(防止配置错误导致无法登录)

打开新的终端窗口,测试证书登录:

ssh -i "$env:USERPROFILE\.ssh\id_rsa_server" root@服务器IP

如果可以成功登录,说明配置正确!

4.4 测试密码登录(应该失败)

ssh -o StrictHostKeyChecking=no -o PreferredAuthentications=password root@服务器IP "echo '测试'"

预期结果:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

如果看到这个错误,说明密码登录已成功禁用!


本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

分享文章
合作伙伴

本站所有广告均是第三方投放,详情请查询本站用户协议