我创建了密钥对使用puttygen.exe(客户端是Windows 8).在服务器(Ubuntu 12.04.3 LTS)上,我已将我的公钥放入~/.ssh/authorized_keys.公钥是这样的:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAopfM6RHOgnuc4Aftn3t4k5UIAT3StCAbn/vg/IMbphbXadshC+79sIlRq3P4zGzMjFTP4hKnzu6ehLV5lmj/qorq3SKT+bPO5Qrac3VbIlrGvuBFDDjP82I2Hwg3HzlsFTstqk++KToapaTYZ7jENEYyPl2wnzITJnt//+4U1o6juoXTKgdNE02hHnRZyHOV/bnkZyJJCEwJv5U0eXSThQnhmXtUxGT8U0HQNFiXfqIIVllhWiCnyrhhIaKz/CIJNAd2VmzyJzQtJtTQX8aWSNVrZju6Sv2/RncTNvsACdNgjjh/FH8PQXaep00jlJ3MOdsC8vz6VSPFbh6iKy1oLQ== rsa-key-20131231
Run Code Online (Sandbox Code Playgroud)
所以这是正确的(一行,没有评论,从ssh-rsa开始,等等)
.ssh dir权限级别为700,authorized_keys文件权限为600.我尝试登录的实际用户拥有的目录和文件.
当我尝试连接时,我正在收到'server refused our key'服务器并要求输入密码.就这样./var/log/auth.log尝试使用密钥登录时未记录任何内容.
我到处寻找,所有文章和提示都提到为文件/目录设置chmod 600和700并正确格式化密钥.我已经做了所有这些仍然'拒绝我们的关键'错误,我没有想法.
Paw*_*man 54
好吧,我的钥匙上有一个小错字.显然,当粘贴到文件时,第一个字母被切断,它以sh-rsa而不是ssh-rsa开头.
nrathathaus - 你的答案非常有帮助,非常感谢,这个答案归功于你:)我喜欢你说并在sshd_conf中设置:
LogLevel DEBUG3
Run Code Online (Sandbox Code Playgroud)
通过查看日志,我意识到sshd正确读取密钥但由于标识符不正确而拒绝它.
Ran*_*nty 25
添加一些想法作为其他答案有帮助,但不完全适合.
首先,如接受的答案中所述,编辑
/etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)
并设置日志级别:
LogLevel DEBUG3
Run Code Online (Sandbox Code Playgroud)
然后尝试进行身份验证,当它失败时,查找日志文件:
/var/log/secure
Run Code Online (Sandbox Code Playgroud)
它会有你想要的错误.
Wes*_*Gun 10
在我的情况下,是一个权限问题.
我将日志级别更改为DEBUG3,在/var/log/secure我看到这一行:
Authentication refused: bad ownership or modes for directory
Run Code Online (Sandbox Code Playgroud)
谷歌搜索,我发现这篇文章:
https://www.daveperrett.com/articles/2010/09/14/ssh-authentication-refused/
Run Code Online (Sandbox Code Playgroud)chmod g-w /home/your_user chmod 700 /home/your_user/.ssh chmod 600 /home/your_user/.ssh/authorized_keys
基本上,它告诉我:
w用户主目录的组权限700的的.ssh目录600的的authorized_keys文件.这很有效.
另一件事是,即使我启用root登录,我也无法开始root工作.更好地使用其他用户.
如果您在 0.75 之前的版本中运行 Putty,则更新 Putty 应该可以解决问题。
较新版本的 openSSH(如 Ubuntu 22.04)已弃用在登录过程中使用 SHA1 哈希算法,但 Putty 在 0.74 版之前一直使用 SHA1。
如果服务器上的 sshd 日志文件显示
$ sudo grep 'sshd' /var/log/auth.log
sshd[113232]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
Run Code Online (Sandbox Code Playgroud)
那么这实际上是导致错误的原因,并且在更新 Putty 后它应该会消失。
运行 Windows 8.1 我遇到了这个server refused our key问题。
遵循指南:https : //winscp.net/eng/docs/guide_windows_openssh_server
使用 Windows 登录username和password. 但是,username结合 a 进行身份验证private key,响应为server refused our key。
让它与公钥一起工作归结为文件的权限:
C:\ProgramData\ssh\administrators_authorized_keys
这是一个有用的页面:https : //github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
停止两个 OpenSSH 服务,然后command prompt用admin permissions. 然后运行:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
注意:指定 exe 的完整路径,否则会sshd报错。这将创建一个一次性使用的连接侦听器。该-ddd是冗长3级。
建立连接后,扫描日志显示:
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Failed to open file:C:/ProgramData/ssh/administrators_authorized_keys error:2
debug1: Could not open authorized keys '__PROGRAMDATA__/ssh/administrators_authorized_keys':
No such file or directory
Run Code Online (Sandbox Code Playgroud)
必须创建文件:C:\ProgramData\ssh\administrators_authorized_keys
并将public key文本复制到其中,例如:ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
然后保存文件。我将文件保存为UTF-8用BOM。没有测试ANSI。
然后再次运行一次性命令行,在日志中显示:
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Bad permissions. Try removing permissions for user: S-1-5-11 on file C:/ProgramData/ssh/administrators_authorized_keys.
Authentication refused.
Run Code Online (Sandbox Code Playgroud)
S-1-5-11是赋予 的名称System。
要修复Bad permissions,右键单击administrators_authorized_keys文件,转到Security Tab,单击Advanced按钮并删除继承的权限。然后删除Group or user names:除 Windows 登录用户名之外的所有用户名,例如:YourMachineName\username
该权限username应为Read Allow,Write Deny其他所有内容均未选中。文件的所有者也应该是YourMachineName\username
这解决了问题。
其他有用的链接:
从下载OpenSSH-Win32.zip:https://github.com/PowerShell/Win32-OpenSSH/releases
如何使用 WinSCPnet.dll 连接到 OpenSSH 服务器的 C# 示例:https ://winscp.net/eng/docs/library#csharp
以下是使用 建立连接的代码片段WinSCPnet.dll:
static void WinSCPTest() {
SessionOptions ops = new SessionOptions {
Protocol = Protocol.Sftp,
PortNumber = 22,
HostName = "192.168.1.188",
UserName = "user123",
//Password = "Password1",
SshHostKeyFingerprint = @"ssh-rsa 2048 qu0f........................ddowUUXA="
};
ops.SshPrivateKeyPath = @"C:\temp\rsa-key-20190505.ppk";
using (Session session = new Session()) {
session.Open(ops);
MessageBox.Show("success");
}
}
Run Code Online (Sandbox Code Playgroud)
用你自己的价值观替换SshHostKeyFingerprint和SshPrivateKeyPath。
编辑:添加了 administrators_authorized_keys 文件权限的截图:

当OpenSSH SSH Server作为服务运行时,那么只System应该有权限。但是,如果sshd.exe从命令提示符运行,则当前用户应该是唯一列出的用户(读允许、写拒绝)。
| 归档时间: |
|
| 查看次数: |
193746 次 |
| 最近记录: |