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),避免重装系统后无法登录服务器!

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

相关推荐
安科士andxe8 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
青云计划11 小时前
知光项目知文发布模块
java·后端·spring·mybatis
儒雅的晴天12 小时前
大模型幻觉问题
运维·服务器
赶路人儿12 小时前
Jsoniter(java版本)使用介绍
java·开发语言
探路者继续奋斗12 小时前
IDD意图驱动开发之意图规格说明书
java·规格说明书·开发规范·意图驱动开发·idd
通信大师13 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
消失的旧时光-194313 小时前
第十九课:为什么要引入消息队列?——异步系统设计思想
java·开发语言
A懿轩A13 小时前
【Java 基础编程】Java 面向对象入门:类与对象、构造器、this 关键字,小白也能写 OOP
java·开发语言
乐观勇敢坚强的老彭14 小时前
c++寒假营day03
java·开发语言·c++
biubiubiu070614 小时前
谷歌浏览器无法访问localhost:8080
java