📌 适用场景
✅ 已在本地生成 SSH 密钥对(
id_ed25519&id_ed25519.pub)✅ 拥有服务器 root 权限及公网 IP:PORT(如
172.0.21.30:45003)❌ 当前仍需要输入密码才能登录服务器
❗ 目标:实现无需密码的自动化登录
🧩 问题本质解析
🛠️ 五步解决方案
第一步:准备阶段 - 确保本地环境就绪
# 检查现有密钥是否存在
ls $env:USERPROFILE\.ssh\id_ed25519*
# 若缺失则重新生成(推荐 ed25519 算法)
ssh-keygen -t ed25519 -C "your_email@example.com"💡 提示:Windows 用户请注意默认存储路径为
C:\Users\<用户名>\.ssh\
第二步:上传公钥到服务器(三种方法任选)
▶️ 方法一:PowerShell 快速推送(推荐新手)
# 1. 读取公钥内容
$pubKey = Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" -Raw
# 2. 执行推送命令(会自动创建 .ssh 目录)
ssh -p 45003 root@172.0.21.30 "mkdir -p ~/.ssh && echo '$pubKey' >> ~/.ssh/authorized_keys"⚠️ 注意:此命令会提示输入服务器密码,这是最后一次人工干预!
▶️ 方法二:手动复制(适合复杂环境)
用文本编辑器打开
id_ed25519.pub并全选复制内容通过普通 SSH 登录服务器:
ssh -p 45003 root@172.0.21.30在服务器终端执行:
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys # 粘贴公钥后保存chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys▶️ 方法三:使用 PuTTYgen(图形化工具)
下载 PuTTYgen.exe 并运行
加载你的
id_ed25519私钥 → 点击 "Public key for pasting into OpenSSH authorized_keys file"复制生成的新公钥字符串 → 按方法二步骤3操作
第三步:配置服务器 SSH 服务
# 编辑配置文件(重要!)
sudo nano /etc/ssh/sshd_config
# 确保以下参数已启用(取消注释并修改):
PubkeyAuthentication yes # 允许密钥认证
PermitRootLogin yes # 允许root登录
PasswordAuthentication no # 禁用密码登录(可选但推荐)
ChallengeResponseAuthentication no # 禁用交互式认证#
保存后重启服务
sudo systemctl restart sshd # Ubuntu/Debian
sudo service ssh restart # CentOS/RHEL🔍 关键检查点:
如果之前修改过该文件,建议先备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak某些云服务商镜像可能需要额外设置:
UsePAM yes
第四步:修复常见权限问题
A. 服务器端权限校验
# 检查权限是否正确ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
# 正确输出应为:
# drwx------ 2 root root 4096 Jan 1 00:00 /root/.ssh# -rw------- 1 root root 790 Jan 1 00:00 /root/.ssh/authorized_keys
# 修复错误权限chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysB. 本地私钥权限修复(Windows专属)
icacls "$env:USERPROFILE\.ssh\id_ed25519" /inheritance:r /grant:r "Administrators:(R)" "Default:(R)"第五步:验证无密码登录
# 测试连接(不应再提示输入密码)
ssh -p 45003 root@172.0.21.30
# 如果仍然失败,开启调试模式排查
ssh -vvv -p 45003 root@172.0.21.30📝 调试要点:
debug1: Offering public key: ...→ 表示正在尝试使用密钥
authentication succeeded→ 成功标志
Permission denied→ 检查权限或服务端配置
💎 进阶优化建议
✔️ VS Code 远程开发配置
安装扩展:Remote - SSH
修改配置文件
~/.ssh/config:
Host myserver
HostName 172.0.21.30
Port 45003
User root
IdentityFile C:\Users\Administrator\.ssh\id_ed25519
IdentitiesOnly yes在 VS Code 中按
F1→ 输入Remote-SSH: Connect to Host...→ 选择myserver
🔄 多设备同步密钥
# 导出公钥供其他设备使用
type "$env:USERPROFILE\.ssh\id_ed25519.pub" | clip
# 复制到剪贴板🔐 安全加固措施
❓ 常见问题速查表
现在你应该已经实现了完全无需密码的 SSH 登录!如果遇到任何新问题,欢迎随时提问。Happy coding! 🚀
Windows 下通过 SSH 密钥免密登录 Linux 服务器完整教程
https://zlib123.cn/archives/windows-xia-tong-guo-ssh-mi-yao-mian-mi-deng-lu-linux-fu-wu-qi-wan-zheng-jiao-cheng
评论