SSH密钥登录与密码禁用教程


SSH密码登录容易遭受暴力破解攻击。搬瓦工VPS开通后,建议立即配置SSH密钥登录并禁用密码认证。密钥认证比密码安全得多,RSA/Ed25519密钥几乎无法被暴力破解,同时还免去了每次输入密码的麻烦。

Tip: 配置SSH密钥前,请确保你可以通过搬瓦工KiwiVM面板的Shell终端访问VPS,以防配置出错后无法登录。

一、在本地生成SSH密钥对

Linux/macOS系统:

# 生成Ed25519密钥(推荐,更安全更快)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 或生成RSA 4096位密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

生成过程中的提示:

生成后会产生两个文件:

~/.ssh/id_ed25519        # 私钥(绝不能泄露!)
~/.ssh/id_ed25519.pub    # 公钥(上传到服务器)

Windows系统(PowerShell):

# Windows 10/11内置OpenSSH,直接在PowerShell中运行:
ssh-keygen -t ed25519 -C "your_email@example.com"

# 密钥保存在 C:\Users\你的用户名\.ssh\ 目录

Windows系统(PuTTY):

使用PuTTYgen生成密钥:打开PuTTYgen,选择Ed25519或RSA(4096位),点击Generate,移动鼠标生成随机数。生成后保存私钥(.ppk文件)并复制公钥文本。

二、上传公钥到VPS

方法1:使用ssh-copy-id(最简单)

# Linux/macOS一键上传
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@your_vps_ip

# 指定端口
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 root@your_vps_ip

方法2:手动上传

# 查看本地公钥内容
cat ~/.ssh/id_ed25519.pub

# 登录VPS后,创建.ssh目录(如果不存在)
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 将公钥内容追加到authorized_keys文件
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

方法3:一行命令完成

cat ~/.ssh/id_ed25519.pub | ssh root@your_vps_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

三、测试密钥登录

上传公钥后,测试是否可以免密码登录:

# 使用密钥登录
ssh root@your_vps_ip

# 如果使用非默认密钥文件
ssh -i ~/.ssh/id_ed25519 root@your_vps_ip

如果成功登录且没有提示输入密码(或只提示输入密钥的passphrase),说明密钥配置正确。

Tip: 务必确认密钥登录成功后,再进行下一步禁用密码登录。否则可能导致无法登录VPS。

四、禁用密码登录

确认密钥登录正常后,编辑SSH配置文件禁用密码认证:

# 编辑sshd配置
nano /etc/ssh/sshd_config

# 修改以下配置项:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# 确保公钥认证已开启
PubkeyAuthentication yes

# 禁止root密码登录(但允许root密钥登录)
PermitRootLogin prohibit-password

重启SSH服务使配置生效:

systemctl restart sshd

验证密码登录已禁用:打开一个新的终端窗口尝试用密码登录,应该被拒绝。同时用密钥登录应该正常。

五、进一步加固SSH

除了密钥认证,还可以进行以下SSH安全加固:

# /etc/ssh/sshd_config 完整安全配置

# 修改默认端口(减少扫描)
Port 2222

# 仅使用SSH协议2
Protocol 2

# 禁止空密码登录
PermitEmptyPasswords no

# 限制登录尝试次数
MaxAuthTries 3

# 设置登录超时
LoginGraceTime 30

# 禁止X11转发(如不需要图形界面)
X11Forwarding no

# 关闭TCP转发(如不需要)
AllowTcpForwarding no

# 禁用DNS反解(加快连接速度)
UseDNS no

# 设置存活检测(防止僵尸连接)
ClientAliveInterval 60
ClientAliveCountMax 3

如果修改了SSH端口,记得更新防火墙规则放行新端口。

六、配置SSH客户端

在本地创建SSH配置文件,简化连接命令:

# 编辑 ~/.ssh/config
nano ~/.ssh/config

# 添加VPS连接配置
Host bwg
    HostName your_vps_ip
    User root
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ServerAliveCountMax 3

之后只需输入ssh bwg即可快速连接。

七、多台设备使用同一VPS

每台设备生成独立的密钥对,将每台设备的公钥都添加到VPS的authorized_keys中:

# authorized_keys文件可以包含多个公钥,每行一个
cat ~/.ssh/authorized_keys
# ssh-ed25519 AAAA... 设备1
# ssh-ed25519 AAAA... 设备2
# ssh-rsa AAAA... 设备3

如果某台设备丢失或不再使用,从authorized_keys中删除对应的行即可撤销访问权限。

八、常见问题排查

如果密钥登录失败,检查以下几点:

# 检查.ssh目录和文件权限(这是最常见的问题)
ls -la ~/.ssh/
# 目录权限应该是 700
# authorized_keys权限应该是 600
# 私钥权限应该是 600

# 修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# 查看SSH登录日志定位问题
tail -50 /var/log/auth.log        # Ubuntu/Debian
tail -50 /var/log/secure          # CentOS

# 使用-v参数调试连接过程
ssh -v root@your_vps_ip

配合Fail2ban可以进一步保护SSH服务,阻止暴力破解攻击。完整的VPS安全方案请参考VPS安全加固指南

Tip: 更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程