在 Windows 服务器上配置 SSH 公钥认证并解决权限问题
在开发环境中,SSH 公钥认证是一种非常安全且常见的连接服务器方式。在这篇文章中,我将带你一步步完成 如何在 Windows 服务器上配置 SSH 公钥认证,并分享遇到的一些问题及解决方案。
前提条件
- 本地电脑为 Windows
- 目标服务器为 Windows
步骤 1:在 Windows 服务器上安装并启动 OpenSSH
首先,我们需要确保服务器上已经安装并运行 OpenSSH 服务。
安装 OpenSSH
-
打开 PowerShell 以管理员身份运行,输入以下命令安装 OpenSSH:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 -
安装完成后,启动 OpenSSH 服务并设置为开机自动启动:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
步骤 2:生成 SSH 密钥对并上传到服务器
接下来,我们需要生成本地的 SSH 密钥对,并将公钥上传到服务器。
生成本地 SSH 密钥对
- 在本地电脑上,打开 PowerShell 并输入以下命令生成 SSH 密钥对:
系统会提示你输入保存路径和密码短语(可选),默认生成ssh-keygen -t rsa -b 4096 -C "your_email@example.com"id_rsa(私钥) 和id_rsa.pub(公钥)。
上传公钥到服务器
-
使用远程桌面连接到 Windows 服务器,确保
.ssh目录存在。运行以下命令:mkdir $env:USERPROFILE\.ssh -
将本地生成的
id_rsa.pub文件内容复制到服务器的authorized_keys文件中:- 打开
authorized_keys文件(如果文件不存在,创建一个):notepad $env:USERPROFILE\.ssh\authorized_keys - 将本地的
id_rsa.pub内容粘贴进去并保存。
- 打开
步骤 3:配置文件和权限设置
为了确保 SSH 服务能够正确读取公钥文件,需要进行一些配置和权限设置。
配置 SSH 服务
-
打开 SSH 服务的配置文件
sshd_config,确认以下设置:notepad C:\ProgramData\ssh\sshd_config -
确保以下内容未被注释:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys -
保存文件后,重启 SSH 服务:
Restart-Service sshd
设置权限
确保 .ssh 目录和 authorized_keys 文件有正确的权限,以便 SSH 服务可以读取。
-
为
.ssh目录和authorized_keys文件授予当前用户完全控制权限:icacls $env:USERPROFILE\.ssh /grant Administrator:F icacls $env:USERPROFILE\.ssh\authorized_keys /grant Administrator:F -
添加 SYSTEM 用户的读取权限,以确保服务可以访问:
icacls $env:USERPROFILE\.ssh /grant SYSTEM:RX icacls $env:USERPROFILE\.ssh\authorized_keys /grant SYSTEM:RX -
移除不必要的继承权限:
icacls C:\Users\Administrator\.ssh\authorized_keys /inheritance:r
步骤 4:测试 SSH 公钥认证
现在我们已经完成了服务器的设置,接下来可以从本地电脑通过 SSH 公钥进行连接。
使用 SSH 公钥连接服务器
- 在本地电脑上,使用以下命令测试连接:
ssh -i $env:USERPROFILE\.ssh\id_rsa Administrator@<YourServerIPAddress>
如果配置正确,你应该可以直接通过公钥登录,而无需输入密码。
步骤 5:优化密码短语问题(可选)
如果你在生成 SSH 私钥时设置了密码短语,那么每次使用私钥时,系统会要求你输入该密码短语。如果不希望每次都输入密码短语,可以选择以下方法进行优化。
1. 移除私钥密码短语
你可以使用 ssh-keygen 命令来移除私钥的密码短语,具体操作是通过不设置新密码来实现:
ssh-keygen -p -f $env:USERPROFILE\.ssh\id_rsa
系统会提示输入当前密码短语,然后你可以选择将新密码短语留空来移除密码。
2. 使用 SSH Agent 缓存密码短语
SSH Agent 可以缓存私钥的密码短语,从而避免每次都输入:
-
检查
ssh-agent服务的状态Get-Service ssh-agent -
如果该服务没有显示,说明它还没有安装或启用。可以通过以下步骤启用它。
-
打开 PowerShell 以管理员身份运行,安装
ssh-agent服务:Add-WindowsCapability -Online -Name OpenSSH.Client~~~~ -
确保
ssh-agent服务已经被安装后,设置该服务为自动启动:Set-Service -Name ssh-agent -StartupType Automatic -
启动
ssh-agent服务:Start-Service ssh-agent
-
-
将私钥添加到 SSH Agent:
ssh-add $env:USERPROFILE\.ssh\id_rsa这样,SSH Agent 会记住私钥密码短语,之后的连接就无需再次输入密码了。
-
从 SSH Agent 中移除私钥:
ssh-add -d $env:USERPROFILE\.ssh\id_rsa
总结
在这篇文章中,我们介绍了如何在 Windows 服务器上配置 SSH 公钥认证,并解决了常见的权限问题。如果你希望进一步优化连接体验,可以选择移除私钥密码短语或者使用 SSH Agent 来缓存私钥。
通过这些步骤,你现在应该能够顺利通过 SSH 公钥认证来连接 Windows 服务器。如果你遇到了其他问题或有任何疑问,欢迎留言讨论!
每天进步一小步,人生跨越一大步。欢迎来扰:Meet you