Windows 免密远程连接 Linux 服务器:SSH 密钥认证完整教程

适用场景:使用 Windows 本地电脑通过 SSH 免密码登录远程 Linux 服务器(如 Ubuntu、CentOS 等),适用于 VS Code Remote-SSH、Trae IDE、PowerShell、Git Bash 等工具。


🌟 为什么推荐免密登录?

在日常开发或运维中,频繁输入 SSH 密码不仅繁琐,还存在以下问题:

  • 容易输错,尤其在复杂密码策略下;
  • 某些 IDE(如 Trae、VS Code)对密码输入支持不完善,常提示"认证失败";
  • 密码认证安全性较低,易受暴力破解;
  • 自动化脚本无法交互式输入密码。

SSH 密钥认证 可以实现:

✅ 一次配置,永久免密

✅ 更高安全性(基于非对称加密)

✅ 与各类开发工具无缝集成


🔧 前提条件

  1. 你的本地电脑是 Windows 10/11(已内置 OpenSSH 客户端);
  2. 远程服务器运行 Linux 系统(如 Ubuntu、CentOS)并开启 SSH 服务;
  3. 你拥有服务器的 用户名和 IP 地址,且当前可通过密码登录一次。

💡 如果尚未安装 OpenSSH 客户端,请在「设置 → 应用 → 可选功能」中添加 "OpenSSH 客户端"。


第一步:在 Windows 生成 SSH 密钥对

打开 PowerShell(以普通用户身份即可),执行:

复制代码
ssh-keygen -t rsa -b 4096

系统会提示你:

复制代码
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/你的用户名/.ssh/id_rsa):

直接按回车,使用默认路径保存。

接着可选择是否设置 passphrase(密钥密码):

  • 若用于个人开发,可直接回车跳过(完全免密);
  • 若用于生产环境,建议设置强密码以增强安全。

完成后,你会看到类似输出:

复制代码
Your identification has been saved in C:\Users\你的用户名\.ssh\id_rsa
Your public key has been saved in C:\Users\你的用户名\.ssh\id_rsa.pub

✅ 私钥文件:id_rsa切勿泄露!

✅ 公钥文件:id_rsa.pub(可安全上传到服务器)


第二步:将公钥部署到远程服务器

方法一:使用 PowerShell 一键上传(推荐)

在 PowerShell 中执行以下命令(替换 your_useryour_server_ip):

复制代码
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh your_user@your_server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

例如:

复制代码
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh ubuntu@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

⚠️ 此步骤会最后一次要求你输入服务器密码,用于完成公钥写入。

方法二:手动复制(适合网络受限环境)

  1. 查看公钥内容:

    type $env:USERPROFILE.ssh\id_rsa.pub

  2. 复制整行输出(以 ssh-rsa AAAAB3... 开头);

  3. 登录服务器,编辑 ~/.ssh/authorized_keys 文件:

    mkdir -p ~/.ssh
    echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

🔒 权限必须正确!否则 SSH 会拒绝加载密钥。


第三步:测试免密登录

在 PowerShell 中尝试连接:

复制代码
ssh your_user@your_server_ip

如果配置成功,不会提示输入密码,而是直接进入服务器命令行!


第四步(可选):关闭服务器密码登录(提升安全)

⚠️ 仅在确认密钥登录成功后操作!

登录服务器,编辑 SSH 配置文件:

复制代码
sudo nano /etc/ssh/sshd_config

找到并修改以下选项:

复制代码
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no    # ← 关键:禁用密码登录

保存后重启 SSH 服务:

复制代码
# Ubuntu/Debian
sudo systemctl restart ssh

# CentOS/RHEL
sudo systemctl restart sshd

🔐 此后,只有持有私钥的设备才能登录,极大提升安全性。


🛠 常见问题排查

❌ 仍提示输入密码?

  • 检查服务器 ~/.ssh/authorized_keys 是否包含你的公钥;
  • 确认 ~/.ssh 目录权限为 700authorized_keys600
  • 查看服务器日志:sudo tail -f /var/log/auth.log(Ubuntu)或 /var/log/secure(CentOS)。

❌ Permission denied (publickey)

  • 确保本地私钥路径正确(默认 %USERPROFILE%\.ssh\id_rsa);
  • 某些工具(如 Git Bash)需使用 Linux 路径格式:~/.ssh/id_rsa

🔄 如何指定自定义私钥?

复制代码
ssh -i "C:\path\to\private_key" user@server

✅ 总结

|--------------|-----------------------------------------------------------------|
| 步骤 | 操作 |
| 1️⃣ 生成密钥 | ssh-keygen -t rsa -b 4096 |
| 2️⃣ 上传公钥 | type id_rsa.pub | ssh user@ip "cat >> ~/.ssh/authorized_keys" |
| 3️⃣ 测试连接 | ssh user@ip (应免密) |
| 4️⃣ (可选)禁用密码 | 修改 /etc/ssh/sshd_config 并重启 sshd |

现在,你已经成功配置了 Windows 到 Linux 的免密 SSH 登录!无论是使用 PowerShell、VS Code、Trae 还是其他支持 SSH 的工具,都能享受无缝、安全的远程开发体验。


📌 小贴士 :建议定期备份你的私钥文件(id_rsa),避免重装系统后无法登录服务器!

如有疑问,欢迎在评论区留言交流!

相关推荐
爱学习的小囧1 天前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
lUie INGA1 天前
在2023idea中如何创建SpringBoot
java·spring boot·后端
坚持就完事了1 天前
Linux中的变量
linux·运维·服务器
geBR OTTE1 天前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
Porunarufu1 天前
博客系统UI自动化测试报告
java
Cat_Rocky1 天前
利用Packet Tracer网络实验
linux·运维·服务器
Aurorar0rua1 天前
CS50 x 2024 Notes C - 05
java·c语言·数据结构
爱学习的小囧1 天前
ESXi VMkernel 端口 MTU 最佳设置详解
运维·服务器·网络·php·虚拟化
Cosmoshhhyyy1 天前
《Effective Java》解读第49条:检查参数的有效性
java·开发语言
布谷歌1 天前
常见的OOM错误 ( OutOfMemoryError全类型详解)
java·开发语言