本地生成ssh密钥并配置到服务器上
VPS 改为密钥登录的完整过程
你这次的情况是:VPS 商家面板不提供密钥添加功能,所以需要自己在本地生成密钥,再手动把公钥写进 VPS。
1. 本地生成密钥
你 Windows 自带的 ssh-keygen 有问题,但你的 Git 里有可用的 ssh-keygen:
D:\Git\usr\bin\ssh-keygen.exe所以你用的是这个命令生成:
New-Item -ItemType Directory -Force "$env:USERPROFILE\.ssh" | Out-Null
& "D:\Git\usr\bin\ssh-keygen.exe" -t ed25519 -C "ccs-vps-key" -f "$env:USERPROFILE\.ssh\ccs_vps_ed25519"生成过程中提示:
Enter passphrase可以直接回车,不设置密码。
你已经成功生成了两份文件:
私钥:
C:\Users\sunop\.ssh\ccs_vps_ed25519
公钥:
C:\Users\sunop\.ssh\ccs_vps_ed25519.pub记住:
私钥:留在自己电脑上,不能泄露
公钥:可以放到 VPS 上2. 查看公钥内容
在 PowerShell 执行:
type "C:\Users\sunop\.ssh\ccs_vps_ed25519.pub"会输出一整行,类似:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...... ccs-vps-key复制这一整行。
不要复制私钥文件内容,也不要把:
C:\Users\sunop\.ssh\ccs_vps_ed25519发给别人。
3. 用密码登录 VPS
你现在还没有配置好密钥,所以先用原来的密码登录:
& "D:\Git\usr\bin\ssh.exe" root@你的VPS_IP如果系统自带 ssh 后续恢复正常,也可以用:
ssh root@你的VPS_IP4. 在 VPS 上添加公钥
进入 VPS 后执行:
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys然后把刚才复制的公钥整行粘贴进去。
保存方式:
Ctrl + O
回车
Ctrl + X然后设置权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys这一步很重要。权限不对时,SSH 可能会拒绝读取密钥。
5. 测试密钥登录
不要关闭当前已经登录 VPS 的窗口。
重新打开一个 PowerShell,执行:
& "D:\Git\usr\bin\ssh.exe" -i "C:\Users\sunop\.ssh\ccs_vps_ed25519" root@你的VPS_IP如果能登录,说明密钥登录已经成功。
这里用的是私钥:
C:\Users\sunop\.ssh\ccs_vps_ed25519VPS 上保存的是公钥:
~/.ssh/authorized_keys6. 确认成功后,再关闭密码登录
确认密钥登录没问题后,再改 SSH 配置。
在 VPS 上执行:
nano /etc/ssh/sshd_config找到或添加:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password含义是:
PubkeyAuthentication yes允许密钥登录。
PasswordAuthentication no禁止密码登录。
PermitRootLogin prohibit-password允许 root 用密钥登录,但禁止 root 用密码登录。
保存后先检查配置:
sshd -t如果没有输出,说明配置语法没问题。
然后重启 SSH 服务:
systemctl restart ssh如果提示没有这个服务,再试:
systemctl restart sshd7. 最终登录命令
以后登录这台 VPS,用:
& "D:\Git\usr\bin\ssh.exe" -i "C:\Users\sunop\.ssh\ccs_vps_ed25519" root@你的VPS_IP可以把 你的VPS_IP 换成实际 IP。
8. 最重要的注意事项
不要删除本地私钥:
C:\Users\sunop\.ssh\ccs_vps_ed25519不要泄露本地私钥。
不要在密钥登录测试成功前关闭密码登录。
不要在密钥登录测试成功前关闭当前 VPS SSH 窗口。
如果以后重装系统、本地换电脑,原来的私钥没了,而 VPS 又关闭了密码登录,就可能登录不上。