【环境配置】Windows 配置 SSH 免密登录 Ubuntu服务器

本文记录如何在 Windows 10/11 上使用 OpenSSH,通过密钥免密登录 Ubuntu 服务器。

文中统一使用 192.0.2.10 作为服务器示例地址。该地址属于文档示例专用地址,实际操作时应替换为自己的服务器 IP。

在这里插入图片描述

一、准备条件

开始之前,需要具备:

  • 一台 Windows 10 或 Windows 11 电脑;
  • 一台可以通过 SSH 访问的 Ubuntu 服务器;
  • Ubuntu 服务器的用户名和密码,或其他可用的初始登录方式;
  • 服务器 SSH 端口,本文假设为默认端口 22

本文示例信息如下:

服务器地址:192.0.2.10
登录用户名:ubuntu
SSH 端口:22
快捷名称:ubuntu-server

二、确认 Windows 已安装 OpenSSH

打开 PowerShell,执行:

ssh -V

如果输出中包含 OpenSSH_for_Windows,说明 SSH 客户端已经安装,可以继续下一步。

如果提示无法识别 ssh 命令,以管理员身份打开 PowerShell,然后执行:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

安装完成后,关闭并重新打开 PowerShell。

三、检查服务器端口是否可访问

执行:

Test-NetConnection 192.0.2.10 -Port 22

如果结果中出现以下内容,说明网络和 SSH 端口基本正常:

TcpTestSucceeded : True

如果结果为 False,应检查:

  • 服务器地址是否正确;
  • SSH 端口是否为 22
  • 服务器和云平台防火墙是否允许该端口;
  • Ubuntu 上的 SSH 服务是否已经启动;
  • 当前网络能否访问服务器。

四、先测试密码登录

执行:

ssh ubuntu@192.0.2.10

第一次连接时,SSH 可能显示服务器公钥指纹并询问是否继续:

Are you sure you want to continue connecting (yes/no/[fingerprint])?

应先确认显示的服务器指纹可信。确认后输入:

yes

随后输入 Ubuntu 上 ubuntu 用户的密码。输入密码时屏幕不会显示字符,这是正常现象。

登录成功后执行以下命令退出服务器:

exit

如果无法完成密码登录,需要先解决用户名、密码、端口或服务器 SSH 配置问题,再继续安装公钥。

五、生成 SSH 密钥

为了避免覆盖电脑上已有的默认密钥,这里为目标服务器创建一套单独的 Ed25519 密钥:

ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server" -C "$env:USERNAME@$env:COMPUTERNAME"

随后会询问是否设置私钥口令:

Enter passphrase (empty for no passphrase):
  • 如果希望整个连接过程完全无提示,连续按两次回车,使用空口令;
  • 如果电脑可能被他人使用,建议设置私钥口令,并结合 ssh-agent 使用,以提高私钥安全性。

命令会生成两个文件:

私钥:%USERPROFILE%\.ssh\id_ed25519_ubuntu_server
公钥:%USERPROFILE%\.ssh\id_ed25519_ubuntu_server.pub

私钥必须妥善保管,不能发送给他人,也不能复制到服务器。需要安装到服务器的是以 .pub 结尾的公钥。

六、将公钥安装到 Ubuntu 服务器

在 PowerShell 中执行:

Get-Content "$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server.pub" | ssh ubuntu@192.0.2.10 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys'

根据提示输入一次 ubuntu 用户的服务器密码。该命令会:

  1. 创建服务器端的 ~/.ssh 目录;
  2. 将 Windows 公钥追加到 ~/.ssh/authorized_keys
  3. 设置 OpenSSH 所要求的目录和文件权限。

七、测试密钥登录

明确指定刚生成的私钥进行测试:

ssh -i "$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server" -o IdentitiesOnly=yes ubuntu@192.0.2.10

如果能够直接进入服务器,并且没有要求输入 Ubuntu 用户密码,说明免密登录已经配置成功。

这里的“免密”是指不再输入 Ubuntu 账户密码。如果生成密钥时设置了私钥口令,SSH 仍可能要求输入该口令。

八、配置 SSH 快捷名称

为了避免每次输入服务器地址、用户名和私钥路径,可以编辑 Windows SSH 配置文件:

notepad "$env:USERPROFILE\.ssh\config"

如果文件不存在,记事本会询问是否创建。写入以下内容:

Host ubuntu-server
    HostName 192.0.2.10
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_ed25519_ubuntu_server
    IdentitiesOnly yes

保存后,可以使用快捷名称登录:

ssh ubuntu-server

也可以通过快捷名称复制文件。例如,将本地的 example.txt 上传到 Ubuntu 用户的主目录:

scp .\example.txt ubuntu-server:~/

九、非默认 SSH 端口

如果服务器使用端口 2222,测试连接时应执行:

ssh -p 2222 ubuntu@192.0.2.10

安装公钥时也需要指定端口:

Get-Content "$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server.pub" | ssh -p 2222 ubuntu@192.0.2.10 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys'

SSH 配置则修改为:

Host ubuntu-server
    HostName 192.0.2.10
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_ubuntu_server
    IdentitiesOnly yes

十、常见问题排查

1. 提示 Permission denied (publickey)

常见原因包括:

  • 公钥没有正确写入 ~/.ssh/authorized_keys
  • 登录用户名错误;
  • 指定了错误的私钥;
  • 服务器端 SSH 服务禁止公钥认证;
  • Ubuntu 用户主目录或 .ssh 目录权限不正确。

如果仍能通过密码或服务器控制台登录,可以在 Ubuntu 上执行:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R "$(id -un):$(id -gn)" ~/.ssh

然后在 Windows 上开启详细日志重新连接:

ssh -vvv ubuntu-server

重点查看客户端是否加载了正确的私钥,以及服务器是否接受对应公钥。

2. 提示 Connection timed out

这通常是网络、路由或防火墙问题。重新检查端口:

Test-NetConnection 192.0.2.10 -Port 22

3. 提示 Connection refused

这通常意味着目标地址可以访问,但对应端口没有 SSH 服务监听。需要检查 SSH 端口,并在 Ubuntu 服务器上检查服务状态:

sudo systemctl status ssh

4. 提示服务器主机密钥发生变化

如果出现 REMOTE HOST IDENTIFICATION HAS CHANGED,不要直接忽略或盲目删除记录。应先通过服务器控制台或管理员确认服务器是否重装、IP 是否被重新分配,并核对新的主机密钥指纹,避免遭遇中间人攻击。

5. 仍然要求输入 Ubuntu 用户密码

可以显式指定私钥排除配置问题:

ssh -i "$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server" -o IdentitiesOnly=yes ubuntu@192.0.2.10

如果该命令可以免密登录,说明问题通常位于 %USERPROFILE%\.ssh\config,需要检查 HostHostNameIdentityFile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一川风絮千片雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值