我在使用公钥身份验证为 Windows 设置 OpenSSH 时遇到问题。
我在本地桌面上运行它,可以使用来自 Unix 机器或其他适用于 Windows 机器的 OpenSSH 的 key 进行 ssh。
我已经将构建复制到服务器上,我可以让密码身份验证正常工作,但是当我使用 key 时,我遇到了以下问题:
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /cygdrive/c/sshusers/jsadmint2232/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Connection closed by 127.0.0.1
因此,出于测试目的,我一直在尝试通过 SSH 连接到本地主机,但即使在远程尝试时,我也会遇到同样的问题。
更奇怪的是,当我在 sshd_config
中同时启用密码和公钥时,它只会尝试使用 key ,然后用上面的消息轰炸,甚至不会尝试使用密码。
以下是我采取的步骤:
- 为 Windows 安装 OpenSSH
mkgroup -l >>..\etc\group
(添加本地组)mkgroup -d >>..\etc\group
(添加域组)mkpasswd -L -u openssh >>..\passwd
(添加我的本地用户)mkpasswd -D -u jsadmint2232 >>..\passwd
(添加我的域用户)- 编辑文件 passwd 中的主目录以指向 c:\sshusers%USER% - 其中 %USER% 是用户名
- 启用密码验证,禁用 key 验证
- 为 jsadmint2232/OpenSSH 创建 SSH key 并确保文件是在主目录中创建的
- 将 authorized_keys 文件添加到每个用户的 .ssh 目录中,并为传入的连接用户添加 key
net 停止 opensshd
/net 启动 opensshd
- 测试密码验证是否在本地和远程都有效
- 已更新 sshd_config,以启用 key 身份验证 - 重新启动 opensshd
- 测试连接并得到上述错误。此外,它甚至不尝试密码验证。
- 更新了 sshd_config,以完全禁用密码验证 - 重新启动 opensshd
- 测试连接,仍然出现上述错误
服务器似乎出于某种原因终止了连接。
最佳答案
以下是 Windows 10 v.1803(2018 年 4 月更新)附带的 OpenSSH 的设置步骤。请参阅本文的评论,它可能不适用于 1809。
服务器设置(提升的 powershell):
安装 OpenSSH 服务器:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
.启动代理和 sshd 服务:
Start-Service ssh-agent; Start-Service sshd
(这将在$env:ProgramData\ssh
中自动生成主机 key 和默认配置)。[可选] 安装 OpenSSHUtils powershell 模块:
Install-Module -Force OpenSSHUtils
客户端设置(非提升的 powershell):
生成用户 key :
cd $env:USERPROFILE\.ssh; ssh-keygen.exe
,按照提示,同意默认建议的文件位置。这将创建 2 个文件:id_rsa
和id_rsa.pub
;[可选] 将 key 添加到身份验证代理,这样您就不必在每次使用时都输入密码:
ssh-add .\id_rsa
(或生成的任何文件);
服务器设置继续(非提升的 powershell):
- 以用户身份登录,要使用的公钥auth
-
cd $env:USERPROFILE; mkdir .ssh; cd .ssh; New-Item authorized_keys
; - 粘贴
id_rsa.pub
的内容文件从客户端到.ssh\authorized_keys
来自上一步的文件。 - 正确设置权限(重要!!!):
- 运行
start .
使用当前文件夹 ($env:USERPROFILE\.ssh
) 打开资源管理器; - 右键单击
authorized_keys
, 转到Properties -> Security -> Advanced
- 点击“禁用继承”;
- 出现提示时选择“将继承的权限转换为对此对象的显式权限”;
- (真的,真的很重要)删除除
SYSTEM
之外的所有文件权限和你自己。文件中必须有恰好两个权限条目。一些指南建议运行Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keys
- 这将尝试添加sshd
用户添加到权限列表,它将破坏身份验证,所以不要这样做,或者至少不同意添加sshd
用户)。两者SYSTEM
并且您自己应该可以完全控制该文件。
- 运行
- 如果您的 Windows 版本是 1809 或更高版本,则需要在
C:\ProgramData\ssh\sshd_config
中注释掉以下行文件。然后重新启动sshd
服务。# Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
客户:
- 运行
ssh <serverusername>@<serverhostname>
.它应该在这一点上工作。
尝试将 Windows 10 作为服务器,将其本身和 Debian Linux 作为客户端。
关于windows - 使用公钥身份验证为 Windows 设置 OpenSSH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212816/