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

相关推荐
安科士andxe2 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
小白同学_C5 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖5 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
儒雅的晴天6 小时前
大模型幻觉问题
运维·服务器
通信大师7 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
不做无法实现的梦~7 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
默|笙9 小时前
【Linux】fd_重定向本质
linux·运维·服务器
x***r1519 小时前
SuperScan4单文件扫描安装步骤详解(附端口扫描与主机存活检测教程)
windows
叫我龙翔9 小时前
【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构
服务器·网络·c++·json
陈苏同学9 小时前
[已解决] Solving environment: failed with repodata from current_repodata.json (python其实已经被AutoDL装好了!)
linux·python·conda