Windows客户端与Linux服务器配置ssh无密码登录

Windows 客户端Linux 服务器 之间配置 SSH 密钥登录(免密登录),可以显著提升安全性与操作效率。以下是完整、清晰、可操作的配置步骤(基于 Windows 10/11 自带 OpenSSH 客户端):


✅ 一、前提条件

  • Windows 客户端
    • 已启用 OpenSSH 客户端(Windows 10 1809+ / Windows 11 默认包含)
      • 检查方法:Win + R → 输入 optionalfeatures → 查看"OpenSSH 客户端"是否已安装
  • Linux 服务器
    • SSH 服务(sshd)已运行(默认端口 22)
    • 你有临时密码可登录一次(用于部署公钥)

🔑 二、在 Windows 上生成 SSH 密钥对

推荐使用 ed25519 算法(比 RSA 更安全高效)

  1. 打开 PowerShell(以普通用户身份即可)
  2. 执行以下命令:
powershell 复制代码
ssh-keygen -t ed25519 -C "your_email_or_comment"
  1. 按提示操作:
    • 保存路径 :直接回车(默认 C:\Users\<用户名>\.ssh\id_ed25519
    • 密钥密码(passphrase):可选,建议设一个(增强私钥安全),也可直接回车跳过

✅ 生成后会得到两个文件:

  • 私钥:id_ed25519绝不可泄露!
  • 公钥:id_ed25519.pub(需上传到服务器)

📤 三、将公钥上传到 Linux 服务器

方法 1:一键自动上传(推荐)

powershell 复制代码
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p 22 username@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

替换:

  • username:你的 Linux 用户名(如 ubunturoot
  • server_ip:服务器公网 IP 或内网 IP
  • -p 22:若 SSH 端口不是 22,请修改
    ⚠️ 首次执行会提示输入 服务器密码(这是最后一次输密码!)

方法 2:手动上传(备用)

  1. 查看公钥内容:
powershell 复制代码
type $env:USERPROFILE\.ssh\id_ed25519.pub
  1. 复制整行输出(以 ssh-ed25519 AAAAC3... 开头)

  2. 登录服务器(用密码):

bash 复制代码
ssh username@server_ip
  1. 在服务器上执行:
bash 复制代码
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

🔒 四、关键权限设置(服务器端必做!)

SSH 对权限极其敏感,权限错误会导致免密失败

bash 复制代码
# 设置目录和文件权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# 确保家目录不能被其他用户写入(否则 SSH 拒绝公钥)
chmod go-w ~

❌ 错误示例:家目录权限为 777 → 公钥认证会被拒绝!


🧪 五、测试免密登录

在 Windows PowerShell 中执行:

powershell 复制代码
ssh username@server_ip

✅ 成功标志:直接进入服务器命令行,无需输入密码

若设置了 passphrase,则会提示输入密钥密码(非服务器密码)


📝 六、(可选)配置 SSH config 文件简化连接

编辑文件:C:\Users\<你的用户名>\.ssh\config

添加如下内容:

config 复制代码
Host myserver
    HostName 123.45.67.89
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

之后只需运行:

powershell 复制代码
ssh myserver

即可免密登录!


🛠 七、VS Code Remote-SSH 免密连接

  1. 安装 VS Code 插件:Remote - SSH
  2. Ctrl+Shift+P → 输入 Remote-SSH: Connect to Host
  3. 选择 myserver(即 config 中定义的 Host)
  4. 自动无密码连接成功!

💡 确保 VS Code 的 SSH 配置文件路径正确(默认即 ~/.ssh/config


🚫 八、常见问题排查

问题 原因 解决方案
仍要求输入密码 authorized_keys 权限不对 执行 chmod 600 ~/.ssh/authorized_keys
Permission denied (publickey) 家目录或 .ssh 权限太宽松 chmod go-w ~chmod 700 ~/.ssh
VS Code 无法免密 未使用 config 或路径错误 检查 Remote.SSH: Config File 设置
连接超时 防火墙/安全组未开放 SSH 端口 检查云服务器安全组(如 AWS/Aliyun)

查看服务器日志定位问题:

bash 复制代码
sudo tail -f /var/log/auth.log      # Ubuntu/Debian
sudo tail -f /var/log/secure        # CentOS/RHEL

🔐 九、(进阶)禁用密码登录(提升安全性)

确认免密登录成功后,可彻底关闭密码登录:

  1. 编辑服务器 SSH 配置:
bash 复制代码
sudo nano /etc/ssh/sshd_config
  1. 修改以下两项:
ini 复制代码
PubkeyAuthentication yes
PasswordAuthentication no
  1. 重启 SSH 服务:
bash 复制代码
# Ubuntu/Debian
sudo systemctl restart ssh

# CentOS/RHEL
sudo systemctl restart sshd

⚠️ 务必先测试免密成功再禁用密码!否则可能被锁在服务器外!


通过以上步骤,你已成功实现 Windows → Linux 的 SSH 密钥免密登录,既安全又高效,适用于日常开发、自动化脚本、CI/CD 等场景。

如需多台服务器管理,可为每台生成独立密钥,并在 config 中分别配置。

相关推荐
Johny_Zhao2 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
阿白的白日梦2 天前
winget基础管理---更新/修改源为国内源
windows
YuMiao2 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1233 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑3 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件3 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号4 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash4 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI4 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行5 天前
Linux和window共享文件夹
linux