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

相关推荐
云飞云共享云桌面1 天前
非标自动化研发成本高?云飞云共享云桌面:1台主机=10台工作站,年省数十万。
大数据·运维·服务器·人工智能·自动化·云计算·电脑
Linux运维技术栈1 天前
生产环境Linux应用目录迁移至LVM独立分区 标准化实战方案
linux·运维·服务器·lvm·逻辑卷
feasibility.1 天前
SSH Agent Forwarding 与 tmux 排障笔记
linux·运维·服务器·经验分享·笔记·ssh
ShawnLiaoking1 天前
Linux 会话窗口常开
linux·运维·服务器
230万光年的思念1 天前
向日葵远程控制ubuntu24一直显示连接中
linux
IMPYLH1 天前
Linux 的 dir 命令
linux·运维·服务器·数据库
fanged1 天前
操作系统番外1(Linux的测试体系)(TODO)
linux·运维·服务器
123过去1 天前
pixiewps使用教程
linux·网络·测试工具·算法·哈希算法
H_老邪1 天前
Linux 与 Docker 常用命令
linux·运维·服务器·docker
博语小屋1 天前
I/O 多路转接之epoll
运维·服务器·数据库