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

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

相关推荐
愤豆2 分钟前
11-Java语言核心-JVM原理-JVM调优详解
java·jvm·测试工具
SEO-狼术12 分钟前
PDFs Programmatically in WPF
java·.net
逝水如流年轻往返染尘26 分钟前
JAVA中的内部类
java·开发语言
深蓝轨迹30 分钟前
黑马点评--达人探店模块
java·spring boot·redis
!停37 分钟前
C++入门基础—类和对象3
java·数据库·c++
寂静or沉默39 分钟前
Java程序员技术面试:如何清晰描述项目难点?逻辑模板!Java的原因与解决方案最新发布!
java·开发语言·面试
竹之却43 分钟前
如何使用 SakuraFrp 做内网穿透
运维·服务器·网络·frp·内网穿透·sakurafrp
爱学习的小囧1 小时前
VMware ESXi V7 无 vCenter 虚拟机磁盘缩减攻略:安全释放存储空间(不丢数据)
服务器·网络·windows·安全·esxi·虚拟化
东离与糖宝1 小时前
Gradle 9.4+Java26:大型项目构建提速100倍实战配置
java·人工智能
同聘云1 小时前
腾讯云服务器防火墙与网络安全的关系—不可或缺?
服务器·web安全·腾讯云