Windows客户端SSH免密登录Linux服务器的核心是让Linux信任Windows公钥,需三步:在Windows生成RSA或ED25519密钥对、用PowerShell管道将公钥上传至Linux的~/.ssh/authorized_keys并设chmod 600权限、确认sshd_config中PubkeyAuthentication yes且重启sshd服务。

在 Windows 客户端通过密钥连接 Linux 服务器,核心是让 Windows 持有私钥、Linux 服务器持有对应公钥,并启用 SSH 密钥认证。整个过程不依赖密码,安全且可自动化。
在 Windows 上生成密钥对
现代 Windows 10/11 已内置 OpenSSH 客户端,无需额外安装。打开 PowerShell(普通用户权限即可),执行:
- ssh-keygen -t rsa -b 4096 -C "your_name@win"
- 提示保存路径时直接回车,私钥默认存为 C:\Users\用户名\.ssh\id_rsa,公钥为 id_rsa.pub
- 是否设置密钥密码(passphrase)?开发环境可跳过(直接回车);生产环境建议设置
把公钥上传到 Linux 服务器
确保你当前能用密码登录一次服务器(如 ssh user@192.168.1.100)。然后在 PowerShell 中运行(替换为你的用户名和 IP):
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
- 该命令自动创建目录、追加公钥、设置正确权限(
authorized_keys必须是 600 权限,否则 SSH 会拒绝读取)
验证并使用密钥登录
上传完成后,直接在 PowerShell 或 Windows Terminal 中输入:
- ssh user@192.168.1.100 —— 若配置无误,将直接登录,不提示密码
- 如需指定私钥路径(例如用了非默认名),用:ssh -i C:\path\to\mykey user@192.168.1.100
- 若提示 “Permission denied (publickey)”,常见原因:公钥内容换行/多空格、
authorized_keys权限不对、sshd 配置未启用密钥认证(检查/etc/ssh/sshd_config中PubkeyAuthentication yes)
进阶:配置 Windows Terminal 自动连接
打开 Windows Terminal 设置(JSON),在 profiles.list 中添加一个新配置项:
- 设置
"commandline": "ssh user@192.168.1.100",或更规范地先配好%USERPROFILE%\.ssh\config文件(含 Host / HostName / User / IdentityFile)再写"commandline": "ssh myserver" - 可同时指定图标、主题色、字体等,实现一键启动即连服务器










