Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用公钥身份验证为Windows设置OpenSSH_Windows_Ssh_Public Key Encryption_Openssh_Public Key - Fatal编程技术网

使用公钥身份验证为Windows设置OpenSSH

使用公钥身份验证为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

我在使用公钥身份验证为Windows设置OpenSSH时遇到问题

我可以在本地桌面上使用它,并且可以使用来自Unix机器或其他Windows机器的OpenSSH的密钥进行ssh

我已将构建复制到服务器上,可以很好地进行密码验证,但使用密钥时会出现以下问题:

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
中同时启用了密码和公钥时,它只会尝试使用密钥,然后用上面的消息爆炸出来,甚至不会尝试使用密码

以下是我采取的步骤:

  • 为Windows安装OpenSSH
  • mkgroup-l>..\etc\group
    (添加了本地组)
  • mkgroup-d>..\etc\group
    (添加域组)
  • mkpasswd-L-u openssh>..\passwd
    (添加了我的本地用户)
  • mkpasswd-D-u jsadmint232>..\passwd
    (添加了我的域用户)
  • 编辑文件passwd中的homedir以指向c:\sshusers%USER%——其中%USER%是用户名
  • 启用密码身份验证,禁用密钥身份验证
  • 为jsadmint2232/OpenSSH创建SSH密钥,并确保在主目录中创建文件
  • 为每个用户将授权密钥文件添加到.ssh目录中,并为传入的连接用户添加密钥
  • net stop opensshd
    /
    net start opensshd
  • 测试密码验证是否在本地和远程工作
  • 更新了sshd_config,以启用密钥身份验证-重新启动opensshd
  • 测试连接并获取上述错误。而且,它甚至不尝试密码验证
  • 更新了sshd_config,以完全禁用密码身份验证-重新启动opensshd
  • 测试连接并仍然得到上述错误

  • 服务器似乎出于某种原因正在终止连接。

    我已解决该问题

    它与启动服务的帐户有关-它正在使用本地系统帐户-这将阻止它访问公钥和授权密钥文件

    一旦我停止了服务并以我试图连接的用户的身份启动,它就成功了


    因此,基本上,您需要从一个服务帐户开始,然后外部用户作为该用户连接。

    如果您使用的是mls software.com版本的OpenSSH,这里还有一个注意事项

    如果使用SSHD_服务器帐户和特权分离进行安装,则可以使用公钥身份验证(per)。但是,如果启用UAC,则安装不会成功。不会正确创建用户,也不会创建服务。在事后手动尝试获取这些项目是非常困难的。在安装之前简单地禁用UAC将允许安装过程正确地创建用户和服务。安装后,您可以重新启用UAC

    当我手动创建SSHD_服务器帐户时,使用密码身份验证时身份验证成功,但客户端使用“/bin/bash:Operation not allowed”终止连接。服务器关闭了使用公钥的身份验证(Cambolie发布的原始错误)

    我通过以下方法解决了这个问题:

  • 在SSHD_服务器+权限分离模式下安装。我还手动在配置中将特权分离设置为“是”。这对我来说很长时间都不起作用,用户没有被创建。然后它成功了,我不知道为什么。我只到控制面板中的用户帐户检查UAC是否关闭。我还有/var/empty,每个人都可以完全访问
  • 对于C:\openssh\var\empty,我已将“属性获取/设置”权限设置为每个人和我自己,并将“完全”权限设置为。\sshd\u服务器。我也让它成为主人

  • 以下是Windows 10 v.1803附带的OpenSSH的安装步骤(2018年4月更新。请参阅本文的评论,1809可能无法使用OpenSSH)

    服务器设置(提升的powershell):

  • 安装OpenSSH服务器:
    Add windowspability-Online-Name OpenSSH.server~~~~~~0.0.1.0

  • 启动代理和sshd服务:
    启动服务ssh代理;启动服务sshd(这将在
    $env:ProgramData\ssh
    中自动生成主机密钥和默认配置)

  • [可选]安装OpenShutils powershell模块:
    安装模块-强制安装OpenShutils

  • 客户端设置(非提升的powershell):

  • 生成用户密钥:
    cd$env:USERPROFILE\.ssh;ssh keygen.exe
    ,按照提示,同意默认的建议文件位置。这将创建两个文件:
    id_rsa
    id_rsa.pub

  • [可选]向身份验证代理添加密钥,这样您就不必在每次使用密码时都输入密码:
    ssh add.\id\u rsa
    (或生成的任何文件)

  • 服务器安装继续(非提升的powershell):

  • 以用户身份登录,并对其使用公钥身份验证
  • 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