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 中分别配置。

相关推荐
印度神油911 小时前
Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
windows·python·ci/cd
2601_9637713711 小时前
Hardening Enterprise WordPress Sites Against REST API Leaks and Bad Headers
前端·windows·word·php
qetfw12 小时前
CentOS 7 基础环境配置
linux·运维·centos
天空'之城12 小时前
Linux 系统编程 21:守护进程与日志系统全解
linux·系统编程·日志系统·守护进程
l1t13 小时前
用split命令恢复被wget -c命令误追加的zip压缩包
linux
随性而行36013 小时前
微信API接口与AI自动化:开发者的实现思路
运维·服务器·开发语言·人工智能·微信·自动化
辉灰笔记14 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
不要小看我们之间的羁绊啊14 小时前
【windows】cc + cc switch + headroom
windows
snow@li15 小时前
Java:Java 服务器(Web 容器 / Servlet 容器)完整工作清单
java·服务器·前端
JL1515 小时前
Agent工程-为什么Agent必须有观测和Tracing
服务器·网络·人工智能·安全