我很难通过 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。
正确设置权限(重要!!!):
- 运行
start .
以使用当前文件夹打开资源管理器($env:USERPROFILE\.ssh
);- 右击
authorized_keys
,转到Properties -> Security -> Advanced
- 点击“禁用继承”;
- 出现提示时选择“将继承的权限转换为此对象的明确权限”;
- (真的,真的很重要)删除文件上除和之外的所有
SYSTEM
权限你自己。 必须有正好两个 文件的权限条目。有些指南建议运行Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keys
- 这将尝试将
sshd
用户添加到权限列表中,并且将要破坏身份验证,所以,不要这样做,或者至少不要同意添加用户sshd
)。您SYSTEM
和您本人都应该对文件有完全的控制权。
答案2
我来自未来!带来礼物!
这就是你们寻求的神奇咒语!
(从https://webinstall.dev/ssh-authorize/)
Repair-AuthorizedKeyPermission
所有这些都可以通过普通的、非提升的 PowerShell 完成:
- 从 GitHub 或任何你存储公钥的地方下载你的公钥
curl.exe 'https://github.com/example.keys' | Out-File 'new_authorized_keys'
- 创建
$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"
- 将下载的密钥添加到两个文件中
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"
- 明确授予
Administrators
和SYSTEM
的权限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)"
- 从两个文件中删除继承的权限
icacls.exe "$HOME\.ssh\authorized_keys" /inheritance:r icacls.exe "${Env:ProgramData}\ssh\administrators_authorized_keys" /inheritance:r
- 仔细检查权限是否明确(非继承):
icacls.exe "$HOME\.ssh\authorized_keys" /t icacls.exe "${Env:ProgramData}\ssh\administrators_authorized_keys" /t
- 删除下载的密钥
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