Repair-AuthorizedKeyPermission

Repair-AuthorizedKeyPermission

我很难通过 SSH 将本地 PC 连接到另一台远程 PC。我按照本教程在 authorized_keys 文件夹中设置了两台机器上的公钥:https://help.ubuntu.com/community/SSH/OpenSSH/Keys但我得到了

权限被拒绝(互动板、公钥)

错误类型。我读到可能的解决方案可能是: /home/<user> or ~/.ssh/authorized_keys权限按照 OpenSSH 标准来说太开放了。您可以通过发出以下命令来更改文件/文件夹权限(如在 Linux 中一样),从而摆脱此问题:

chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

我的问题是,如何像提到的权限那样改变 Windows 中与文件夹相关的权限?

谢谢!更新:这是服务器端的日志:

Failed to open file:C:/ProgramData/ssh/administrators_authorized_keys error:2
5036 2021-10-18 11:16:06.413 debug1: Could not open authorized keys '__PROGRAMDATA__/ssh/administrators_authorized_keys': No such file or directory

答案1

虽然不正确的文件权限可能是一个问题,而且确实经常如此,但它们并不是登录失败的唯一原因。

请调查问题的原因,而不是尝试解决方案。
例如,检查ssh 服务器日志查找错误消息并利用这些消息来找到适当的解决方案。

如果文件的文件权限$env:USERPROFILE\.ssh\authorized_keys确实是问题所在:例如,通过快速搜索发现https://stackoverflow.com/a/50502015其中详细说明了如何在 Windows 主机上设置使用公钥认证的 ssh。

正确设置权限(重要!!!):

  1. 运行start .以使用当前文件夹打开资源管理器($env:USERPROFILE\.ssh);
  2. 右击authorized_keys,转到Properties -> Security -> Advanced
  3. 点击“禁用继承”;
  4. 出现提示时选择“将继承的权限转换为此对象的明确权限”;
  5. (真的,真的很重要)删除文件上除和之外的所有SYSTEM权限你自己。 必须有正好两个 文件的权限条目。有些指南建议运行 Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keys
  • 这将尝试将sshd用户添加到权限列表中,并且将要破坏身份验证,所以,不要这样做,或者至少不要同意添加用户sshd)。您SYSTEM和您本人都应该对文件有完全的控制权。

另请参阅:https://github.com/PowerShell/Win32-OpenSSH/wiki/Security-protection-of-various-files-in-Win32-OpenSSH

答案2

我来自未来!带来礼物!

这就是你们寻求的神奇咒语!

(从https://webinstall.dev/ssh-authorize/

Repair-AuthorizedKeyPermission

所有这些都可以通过普通的、非提升的 PowerShell 完成:

  1. 从 GitHub 或任何你存储公钥的地方下载你的公钥
    curl.exe 'https://github.com/example.keys' | Out-File 'new_authorized_keys'
    
  2. 创建$HOME\.ssh\authorized_keys${Env:ProgramData}\ssh\administrators_authorized_keys
    New-Item -Type Directory -Force -Path "$HOME\.ssh\"
    New-Item -Type File -Force -Path "$HOME\.ssh\authorized_keys"
    
    New-Item -Type File -Force -Path "${Env:ProgramData}\ssh\administrators_authorized_keys"
    
  3. 将下载的密钥添加到两个文件中
    type 'new_authorized_keys' | Add-Content -Force -Path "$HOME\.ssh\authorized_keys"
    type 'new_authorized_keys' | Add-Content -Force -Path "${Env:ProgramData}\ssh\administrators_authorized_keys"
    
  4. 明确授予AdministratorsSYSTEM的权限administrators_authorized_keys,以及您自己对您自己的密钥的 权限
    icacls.exe "${HOME}\.ssh\authorized_keys" /t /grant "${Env:UserName}:(F)"
    
    icacls.exe "${Env:ProgramData}\ssh\administrators_authorized_keys" /t /grant "Administrators:(F)"
    icacls.exe "${Env:ProgramData}\ssh\administrators_authorized_keys" /t /grant "SYSTEM:(F)"
    
  5. 从两个文件中删除继承的权限
    icacls.exe "$HOME\.ssh\authorized_keys" /inheritance:r
    
    icacls.exe "${Env:ProgramData}\ssh\administrators_authorized_keys" /inheritance:r
    
  6. 仔细检查权限是否明确(非继承):
    icacls.exe "$HOME\.ssh\authorized_keys" /t
    icacls.exe "${Env:ProgramData}\ssh\administrators_authorized_keys" /t
    
  7. 删除下载的密钥
    Remove-Item -Path 'new_authorized_keys'
    

再检查一遍

~/.ssh/现在应该只有一个用户的权限:

icacls.exe "$HOME\.ssh\" /t
C:\Users\alice\.ssh\ Windoze\alice:(F)

C:\Users\alice\.ssh\authorized_keys Windoze\alice:(F)

Successfully processed 2 files; Failed processing 0 files

同样,${Env:ProgramData}\ssh\应该有非常少的权限:

icacls.exe "${Env:ProgramData}\ssh\" /t
C:\ProgramData\ssh\ NT AUTHORITY\SYSTEM:(F)
                    BUILTIN\Administrators:(F)

C:\ProgramData\ssh\administrators_authorized_keys NT AUTHORITY\SYSTEM:(F)
                                                  BUILTIN\Administrators:(F)

...

故障排除

重新开始

  • 停止 ssh-agent 和 sshd
  • 删除或重命名配置文件
  • 启动 sshd 和 ssh-agent

你必须处于高架状态,管理员 PowerShell停止和启动服务。

Stop-Service ssh-agent
Stop-Service sshd

Move-Item "$HOME\.ssh" "$HOME\.ssh.old"
Move-Item "$Env:ProgramData\ssh" "$Env:Programdata\ssh.old"

Start-Service sshd
Start-Service ssh-agent

删除额外用户

注意:如果由于其他魔法咒语出错而您仍然有其他非继承用户,则需要手动将其删除:

icacls.exe "$HOME\.ssh\" /t /remove bob
icacls.exe "${Env:ProgramData}\ssh\" /t /remove bob

如果有人找到一种方法来自动列出和删除它们(除了直接对输出进行文本处理icacls.exe),请告诉我。

默认权限

如果你move "$Env:ProgramData\ssh" "$Env:ProgramData\ssh.old"重启,您将看到以下内容:

以供参考:

icacls.exe "$Env:ProgramData\ssh" /t
C:\ProgramData\ssh NT AUTHORITY\SYSTEM:(OI)(CI)(F)
                   BUILTIN\Administrators:(OI)(CI)(F)
                   NT AUTHORITY\Authenticated Users:(OI)(CI)(RX)

C:\ProgramData\ssh\logs NT AUTHORITY\SYSTEM:(OI)(CI)(F)
                        BUILTIN\Administrators:(OI)(CI)(F)

C:\ProgramData\ssh\sshd.pid NT AUTHORITY\SYSTEM:(I)(F)
                            BUILTIN\Administrators:(I)(F)
                            NT AUTHORITY\Authenticated Users:(I)(RX)

C:\ProgramData\ssh\sshd_config NT AUTHORITY\SYSTEM:(F)
                               BUILTIN\Administrators:(F)
                               NT AUTHORITY\Authenticated Users:(RX)

C:\ProgramData\ssh\ssh_host_dsa_key BUILTIN\Administrators:(F)
                                    NT AUTHORITY\SYSTEM:(F)

C:\ProgramData\ssh\ssh_host_dsa_key.pub BUILTIN\Administrators:(F)
                                        NT AUTHORITY\SYSTEM:(F)

C:\ProgramData\ssh\ssh_host_ecdsa_key BUILTIN\Administrators:(F)
                                      NT AUTHORITY\SYSTEM:(F)

C:\ProgramData\ssh\ssh_host_ecdsa_key.pub BUILTIN\Administrators:(F)
                                          NT AUTHORITY\SYSTEM:(F)

C:\ProgramData\ssh\ssh_host_ed25519_key BUILTIN\Administrators:(F)
                                        NT AUTHORITY\SYSTEM:(F)

C:\ProgramData\ssh\ssh_host_ed25519_key.pub BUILTIN\Administrators:(F)
                                            NT AUTHORITY\SYSTEM:(F)

C:\ProgramData\ssh\ssh_host_rsa_key BUILTIN\Administrators:(F)
                                    NT AUTHORITY\SYSTEM:(F)

C:\ProgramData\ssh\ssh_host_rsa_key.pub BUILTIN\Administrators:(F)
                                        NT AUTHORITY\SYSTEM:(F)

Successfully processed 12 files; Failed processing 0 files

相关内容