【环境配置】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-NetConnection192.0.2.10-Port 22如果结果中出现以下内容说明网络和 SSH 端口基本正常TcpTestSucceeded : True如果结果为False应检查服务器地址是否正确SSH 端口是否为22服务器和云平台防火墙是否允许该端口Ubuntu 上的 SSH 服务是否已经启动当前网络能否访问服务器。四、先测试密码登录执行ssh ubuntu192.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 ubuntu192.0.2.10umask 077; mkdir -p ~/.ssh; cat ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys根据提示输入一次ubuntu用户的服务器密码。该命令会创建服务器端的~/.ssh目录将 Windows 公钥追加到~/.ssh/authorized_keys设置 OpenSSH 所要求的目录和文件权限。七、测试密钥登录明确指定刚生成的私钥进行测试ssh-i$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server-o IdentitiesOnlyyes ubuntu192.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 ubuntu192.0.2.10安装公钥时也需要指定端口Get-Content$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server.pub|ssh-p 2222 ubuntu192.0.2.10umask 077; mkdir -p ~/.ssh; cat ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keysSSH 配置则修改为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~/.sshchmod700~/.sshchmod600~/.ssh/authorized_keyschown-R$(id-un):$(id-gn)~/.ssh然后在 Windows 上开启详细日志重新连接ssh-vvv ubuntu-server重点查看客户端是否加载了正确的私钥以及服务器是否接受对应公钥。2. 提示Connection timed out这通常是网络、路由或防火墙问题。重新检查端口Test-NetConnection192.0.2.10-Port 223. 提示Connection refused这通常意味着目标地址可以访问但对应端口没有 SSH 服务监听。需要检查 SSH 端口并在 Ubuntu 服务器上检查服务状态sudosystemctl statusssh4. 提示服务器主机密钥发生变化如果出现REMOTE HOST IDENTIFICATION HAS CHANGED不要直接忽略或盲目删除记录。应先通过服务器控制台或管理员确认服务器是否重装、IP 是否被重新分配并核对新的主机密钥指纹避免遭遇中间人攻击。5. 仍然要求输入 Ubuntu 用户密码可以显式指定私钥排除配置问题ssh-i$env:USERPROFILE\.ssh\id_ed25519_ubuntu_server-o IdentitiesOnlyyes ubuntu192.0.2.10如果该命令可以免密登录说明问题通常位于%USERPROFILE%\.ssh\config需要检查Host、HostName和IdentityFile。