在 Win11 PowerShell 中通过 SSH 密钥实现无密码访问 Linux 服务器,公钥使用 方法2 手动复制

公钥使用 方法2 手动复制!
公钥使用 方法2 手动复制!
公钥使用 方法2 手动复制!

在 Win11 PowerShell 中通过 SSH 密钥实现无密码访问 Linux 服务器

要在 Win11 PowerShell 中配置无密码访问 Linux 服务器,核心是通过 SSH 密钥认证 实现(替代密码登录),无需安装额外工具(Win11 自带 OpenSSH 客户端)。以下是完整步骤:

前提条件

  1. Linux 服务器已开启 SSH 服务(默认端口 22,需确保防火墙放行 22 端口)。

  2. Win11 已启用 OpenSSH 客户端

    • 打开「设置」→「应用」→「可选功能」→ 查看是否有 OpenSSH 客户端,无则点击「添加功能」安装。

步骤 1:在 Win11 PowerShell 生成 SSH 密钥对

  1. 管理员身份打开 PowerShell(右键开始菜单 → 选择 Windows PowerShell (管理员))。

  2. 执行密钥生成命令:

    PowerShell 复制代码
    ssh root@192.168.3.150
    • -t rsa:指定密钥类型为 RSA

    • -b 4096:密钥长度,安全性更高

  3. 命令执行后会出现 3 次提示,全部按回车默认配置

    • 提示 1:Enter file in which to save the key → 密钥保存路径(默认 C:\Users\你的用户名.ssh\id_rsa

    • 提示 2:Enter passphrase → 密钥密码(留空 = 无密码,直接回车)

    • 提示 3:Enter same passphrase again → 再次确认密码(留空直接回车)

  4. 生成成功后,C:\Users\你的用户名.ssh\ 目录下会有 2 个文件:

    • id_rsa私钥(本地保存,绝对不能泄露)

    • id_rsa.pub公钥(需要上传到 Linux 服务器)

步骤 2:将公钥上传到 Linux 服务器

推荐 2 种方法,优先用方法 1(更便捷)。

方法 1:用 ssh-copy-id 自动上传(推荐)
  1. 在 PowerShell 中执行以下命令,替换为你的 Linux 服务器信息:

    PowerShell 复制代码
    ssh-copy-id -i C:\Users\你的用户名\.ssh\id_rsa.pub  linux用户名@Linux服务器IP
    • 示例:ssh-copy-id -i C:\Users\Jeremy.ssh\id_rsa.pub ubuntu@192.168.1.100
  2. 首次执行会提示确认服务器指纹,输入 yes 回车,然后输入 Linux 服务器的密码 ,回车后公钥会自动上传到 Linux 服务器的 ~/.ssh/authorized_keys 文件中。

方法 2:手动复制公钥(备用,适用于 ssh-copy-id 不可用场景)
  1. 在 Win11 中打开 C:\Users\你的用户名.ssh\id_rsa.pub 文件,全选复制所有内容

  2. 登录 Linux 服务器(用密码登录),执行以下命令:

    Bash 复制代码
    # 1. 创建 .ssh 目录(确保存在)

mkdir -p /root/.ssh

2. 设置目录权限(必须为 700,SSH 认证的关键)

chmod 700 /root/.ssh

3. 将你的公钥写入 authorized_keys 文件(直接复制这条,公钥已完整填入)

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCX1p8u+W6ubDeDjEdQPzGfKuH4fIA2Kxh4wQC1MZH2iOS4vHzUxt2IYRbVcDkBR2JjDVRUX9D7cGWtfPUdrRm2Rl6gAT6Fve6dAKnpHT5iZgL7Fsxbs1I6MUT51DODCLtFOAUkrwkCdG7fdKCLfKkvGj0Lm82WqHg+qHOjSQp3lSGDYxPUIbXX9zyji/WR4ZJb4oXYRiBma0wya+zUwRv14okvfqR5VO+LHU9VXX/0OTru8EUhdp3STCs5xgHiQ7jj3Kw3pbDaE/q/t0bquijdJvWu3X00cnhrWVLdnd4IdmbcIf3Khh6rapHkUvyx/bsq2YFijdRDZ/xlMcOl9DuwtwUbJjkZ6AnBJ1dXkFlZbWDLsOziZ9+DUhNWXEzvxtjFb/IhruulOq9sSvREOPp97KKlFSjByarN8u0T2yHS+5CNR7RkCVHGi3ZVbu5OtQzH7qVVbiSDOE34sM78M6dJuNKhn55IulUFZ3gS/Jj1+uFzPBHN/A8sl/OKkfmqdnifirouE1KxC6lUtGHr23ULsi2TZ1a67l82n4JA9b6OSpYPg2tPGt7eJY3kz/i5/WpCAf5ZTlNzUDStfZfDidjZMxSMgRxs+dqn50RtIgkxUnVL2QUxnjXo9NxuHFTqROMsXxucaOZwnbY8UBzJZBLZLFneSgpC9U1UvWMrtsshbw== jeremy@snoopy" >> /root/.ssh/authorized_keys

4. 设置文件权限(必须为 600,否则密钥认证失效)

chmod 600 /root/.ssh/authorized_keys

```

步骤 3:测试无密码登录

在 Win11 PowerShell 中执行登录命令,无需输入密码即可成功连接:

PowerShell 复制代码
# 1. 创建 .ssh 目录(如果不存在)
mkdir -p ~/.ssh
# 2. 设置目录权限(必须为 700,否则 SSH 会拒绝认证)
chmod 700 ~/.ssh
# 3. 将公钥内容写入 authorized_keys 文件
echo "你复制的公钥内容" >> ~/.ssh/authorized_keys
# 4. 设置文件权限(必须为 600)
chmod 600 ~/.ssh/authorized_keys

示例:ssh ubuntu@192.168.1.100

常见问题排查

  1. 权限错误 :Linux 服务器的 ~/.ssh 目录权限必须是 700authorized_keys 必须是 600,否则 SSH 会优先要求密码登录。

  2. SSH 服务未开启 :Linux 服务器执行 sudo systemctl start sshd 启动服务,sudo systemctl enable sshd 设置开机自启。

  3. 防火墙拦截 :Linux 服务器放行 22 端口,例如 sudo ufw allow 22(UFW 防火墙)。


相关推荐
松涛和鸣2 小时前
42、SQLite3 :字典入库与数据查询
linux·前端·网络·数据库·udp·sqlite
QT 小鲜肉2 小时前
【Linux命令大全】001.文件管理之rcp命令(实操篇)
linux·服务器·网络·chrome·笔记
Tipriest_2 小时前
Linux 下开发 C/C++ 程序为什么头文件引用路径这么多和复杂
linux·c语言·c++
oMcLin2 小时前
Linux 容器技术实战:从 Docker 到 Podman 的无 root 权限部署
linux·docker·podman
Tipriest_2 小时前
ubuntu快速查看一个apt包的描述信息和依赖等
linux·运维·ubuntu·apt
时空无限4 小时前
EFK 中使用 ruby 和 javascript 脚本去掉日志中颜色字符详解
linux·javascript·elk·ruby
张火火isgudi11 小时前
fedora43 安装 nvidia 驱动以及开启视频编解码硬件加速
linux·运维·视频编解码·nvidia
IT199512 小时前
Qt笔记-使用SSH2进行远程连接linux服务器并上传文件
linux·服务器·笔记
XXYBMOOO12 小时前
内核驱动开发与用户级驱动开发:深度对比与应用场景解析
linux·c++·驱动开发·嵌入式硬件·fpga开发·硬件工程