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 用户名(如 ubuntu、root)
  • 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 中分别配置。

相关推荐
djjjx.2 分钟前
Linux进程篇(二):深入浅出 [进程概念与进程父子关系]:从底层原理到实战应用
linux·运维·服务器
鬼手点金8 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
贵州诚鑫致达科技有限公司9 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
遇印记10 小时前
传输层,网络层
运维·服务器·网络·windows·学习
Elastic 中国社区官方博客10 小时前
一条 ES|QL 查询,涵盖365天的审计日志:在热数据和可搜索快照上执行相同的搜索
大数据·运维·服务器·elasticsearch·搜索引擎·全文检索
北京中科新远科技11 小时前
高速光模块上线验收实战:DOM、FEC、BER与端口计数器怎么一起看
服务器·网络·php
又見山11 小时前
Obsidian 跨平台同步实测:Nutstore Sync 在 Windows、Mac、Linux、iOS、Android 全平台综合测评
windows·macos·obsidian·obsidian同步·obsidian教程·obsidian入门·obsidian笔记库搭建
澜山奕秋12 小时前
RHCSA
linux·运维·服务器
pride.li12 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
jearry12 小时前
一个编辑器两个内核:Markdown 实时视图与源码视图并存时的竞态、光标锚点与 PDF 导出
windows·markdown