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_user 和 your_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 目录权限为 700,authorized_keys 为 600;
  • 查看服务器日志: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),避免重装系统后无法登录服务器!

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

相关推荐
0+1117 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
青瓦梦滋7 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家7 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890758 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻8 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
wangchunyu1148 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck9 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir9 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人9 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_9445215910 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github