使用公钥身份验证为Windows设置OpenSSH
我在使用公钥身份验证为Windows设置OpenSSH时遇到问题 我可以在本地桌面上使用它,并且可以使用来自Unix机器或其他Windows机器的OpenSSH的密钥进行ssh 我已将构建复制到服务器上,可以很好地进行密码验证,但使用密钥时会出现以下问题:使用公钥身份验证为Windows设置OpenSSH,windows,ssh,public-key-encryption,openssh,public-key,Windows,Ssh,Public Key Encryption,Openssh,Public Key,我在使用公钥身份验证为Windows设置OpenSSH时遇到问题 我可以在本地桌面上使用它,并且可以使用来自Unix机器或其他Windows机器的OpenSSH的密钥进行ssh 我已将构建复制到服务器上,可以很好地进行密码验证,但使用密钥时会出现以下问题: debug1: Authentications that can continue: publickey,password,keyboard-interactive debug3: start over, passed a different
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到localhost,但即使远程尝试,我也会遇到同样的问题
更奇怪的是,当我在sshd_config
中同时启用了密码和公钥时,它只会尝试使用密钥,然后用上面的消息爆炸出来,甚至不会尝试使用密码
以下是我采取的步骤:
mkgroup-l>..\etc\group
(添加了本地组)mkgroup-d>..\etc\group
(添加域组)mkpasswd-L-u openssh>..\passwd
(添加了我的本地用户)mkpasswd-D-u jsadmint232>..\passwd
(添加了我的域用户)net stop opensshd
/net start opensshd
服务器似乎出于某种原因正在终止连接。我已解决该问题 它与启动服务的帐户有关-它正在使用本地系统帐户-这将阻止它访问公钥和授权密钥文件 一旦我停止了服务并以我试图连接的用户的身份启动,它就成功了
因此,基本上,您需要从一个服务帐户开始,然后外部用户作为该用户连接。如果您使用的是mls software.com版本的OpenSSH,这里还有一个注意事项 如果使用SSHD_服务器帐户和特权分离进行安装,则可以使用公钥身份验证(per)。但是,如果启用UAC,则安装不会成功。不会正确创建用户,也不会创建服务。在事后手动尝试获取这些项目是非常困难的。在安装之前简单地禁用UAC将允许安装过程正确地创建用户和服务。安装后,您可以重新启用UAC 当我手动创建SSHD_服务器帐户时,使用密码身份验证时身份验证成功,但客户端使用“/bin/bash:Operation not allowed”终止连接。服务器关闭了使用公钥的身份验证(Cambolie发布的原始错误) 我通过以下方法解决了这个问题:
以下是Windows 10 v.1803附带的OpenSSH的安装步骤(2018年4月更新。请参阅本文的评论,1809可能无法使用OpenSSH) 服务器设置(提升的powershell):
Add windowspability-Online-Name OpenSSH.server~~~~~~0.0.1.0
启动服务ssh代理;启动服务sshd(这将在$env:ProgramData\ssh
中自动生成主机密钥和默认配置)
安装模块-强制安装OpenShutils
cd$env:USERPROFILE\.ssh;ssh keygen.exe
,按照提示,同意默认的建议文件位置。这将创建两个文件:id_rsa
和id_rsa.pub
ssh add.\id\u rsa
(或生成的任何文件)cd$env:USERPROFILE;mkdir.ssh;cd.ssh;新项目授权密钥
李>
id\u rsa.pub
文件的内容从客户端粘贴到上一步中的.ssh\authorized\u keys
文件start.
打开带有当前文件夹的资源管理器($env:USERPROFILE\.ssh
)李>
授权密钥
,进入属性->安全->高级
系统
和您自己之外的所有文件权限。必须有恰好两个权限
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
PowerShell.exe -ExecutionPolicy Bypass -File "C:\bypass\prompt\standard.ps1" 2>&1>$null
Add-WindowsCapability -Online -Name OpenSSH.Server
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -Program "%WINDIR%\System32\OpenSSH\sshd.exe"
#Must Enable ssh-agent before starting
Set-Service -Name ssh-agent -StartupType Automatic
Set-Service -Name sshd -StartupType Automatic
Start-Service ssh-agent; Start-Service sshd
$sshdir="$env:USERPROFILE\.ssh"
mkdir $sshdir
copy .\id_rsa $sshdir\
cat $sshdir\id_rsa
copy .\*.pub $sshdir\authorized_keys
cat $sshdir\authorized_keys
ssh-add $sshdir\id_rsa
$sshd_config="C:\ProgramData\ssh\sshd_config"
(Get-Content $sshd_config) -replace '#PubkeyAuthentication', 'PubkeyAuthentication' | Out-File -encoding ASCII $sshd_config
(Get-Content $sshd_config) -replace 'AuthorizedKeysFile __PROGRAMDATA__', '#AuthorizedKeysFile __PROGRAMDATA__' | Out-File -encoding ASCII $sshd_config
(Get-Content $sshd_config) -replace 'Match Group administrators', '#Match Group administrators' | Out-File -encoding ASCII $sshd_config
cat C:\ProgramData\ssh\sshd_config
Restart-Service ssh-agent; Restart-Service sshd
Write-Host "Use this to Login/test Now"
write-host ssh $env:UserName@localhost
$acl = Get-Acl C:\ProgramData\ssh\administrators_authorized_keys
$acl.SetAccessRuleProtection($true, $false)
$administratorsRule = New-Object system.security.accesscontrol.filesystemaccessrule("Administrators","FullControl","Allow")
$systemRule = New-Object system.security.accesscontrol.filesystemaccessrule("SYSTEM","FullControl","Allow")
$acl.SetAccessRule($administratorsRule)
$acl.SetAccessRule($systemRule)
$acl | Set-Acl