Putty:让服务器拒绝了我们的关键错误

时间:2013-12-31 23:30:26

标签: ssh putty

我使用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

所以这是正确的(一行,没有评论,从ssh-rsa等开始)

.ssh dir权限级别为700,authorized_keys文件权限为600.我尝试登录的实际用户拥有的目录和文件。

当我尝试连接时,我收到'server refused our key',服务器要求输入密码。就这样。尝试使用密钥登录时,/var/log/auth.log没有记录任何内容。

我到处寻找,所有文章和提示都提到为文件/目录设置chmod 600和700并正确格式化密钥。我已经完成了所有这些仍然“拒绝我们的关键”错误,我没有想法。

30 个答案:

答案 0 :(得分:52)

好吧,我的钥匙上有一个小错字。显然,当粘贴到文件时,第一个字母被切断了,它以sh-rsa而不是ssh-rsa开始。

nrathathaus - 你的答案非常有帮助,非常感谢,这个答案归功于你:)我喜欢你说的并在sshd_conf中设置:

LogLevel DEBUG3

通过查看日志,我意识到sshd正确读取密钥但由于标识符不正确而拒绝它。

答案 1 :(得分:21)

在其他答案中添加一些想法有所帮助,但并不完全合适。

首先,如接受的答案所述,编辑

/etc/ssh/sshd_config

并设置日志级别:

LogLevel DEBUG3

然后尝试进行身份验证,当失败时,查找日志文件:

/var/log/secure

它会有你想要的错误。

答案 2 :(得分:13)

在我的情况下,我不得不将/ home / user的权限从0755更改为0700。

答案 3 :(得分:7)

在我的情况下,是权限问题。

我将日志级别更改为DEBUG3,并在/var/log/secure中看到此行:

Authentication refused: bad ownership or modes for directory

谷歌搜索,我发现这篇文章:

https://www.daveperrett.com/articles/2010/09/14/ssh-authentication-refused/

chmod g-w /home/your_user
chmod 700 /home/your_user/.ssh
chmod 600 /home/your_user/.ssh/authorized_keys

基本上,它告诉我:

  • 摆脱用户主目录
  • 的群组w权限
  • 更改700 dir
  • .ssh的权限
  • 将权限更改为600文件的authorized_keys

这很有效。

另一件事是,即使我启用了root登录,也无法让root工作。更好地使用其他用户。

答案 4 :(得分:3)

我正在添加这个答案,以帮助像我一样花费数小时搜索互联网但没有成功的人。

您的家庭文件夹可能会被加密。

或者就此而言,嵌套了“authorized_keys”文件的任何文件夹。伙计,这会为我节省很多时间。要检查,请执行

ls -A

在您要确定其加密状态的目录上。如果该文件夹包含名为“.encryptfs”的文件夹,则答案是,该文件夹已加密。这将妨碍您访问包​​含验证所需的公共ssh密钥的“authorized_keys”文件。

要解决此问题,请将“authorized_key”文件放在不包含加密的目录树中。

答案 5 :(得分:3)

我找到的简单解决方案是将authorized_keys文件移离隐藏的.ssh目录并将其放入系统ssh目录中:

/etc/ssh/keys/authorized_keys

我一做到这一点就没有问题。

答案 6 :(得分:3)

在Windows Server 2008 r2中遇到同样的问题,并探索了很多要解决的问题,最后通过以下方式做到了:

使用textpad或任何其他文本编辑器打开C:\ Program Files(x86)\ OpenSSH \ etc \ sshd_config

删除以下行中的注释,删除后应如下所示:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

保存并尝试使用私钥登录。 玩得开心。

答案 7 :(得分:2)

SSH 命令的等效项:

ssh -i <path_to_pem_file> ec2-user@calendar.com

在 Windows 中,首先使用 PuTTYGen 将 pem 文件转换为 ppk 文件。

  1. 打开PuTTYGen
  2. 文件/加载私有 pem 密钥 (或 OpenSSH 密钥)
  3. 在打开文件对话框中,使用下拉菜单选择“所有文件”(它只显示 ppk 文件格式而不是 pem,还有像 pem 文件一样可以转换的 OpenSSH 密钥文件没有文件扩展名< /em>)
  4. 文件/保存私钥 (*.ppk)

Putty 中与 SSH 命令相同的设置:

  1. 打开Putty
  2. 会话/主机名:calendar.com
  3. 连接/数据/自动登录用户名:ec2-user
  4. Connection/SSH/Auth/PrivateKeyFile Path:PPK文件的文件路径

答案 8 :(得分:2)

我今天遇到了这个问题,我的问题是,从文件复制公钥时,还包括换行符。您可以在vim中使用“:set list”来查看所有隐藏的新行,并确保删除除最后一行以外的所有新行。另外,我的钥匙一开始就缺少“ ssh-rsa”。确保您也有。

答案 9 :(得分:2)

感谢nrathaus和/var/log/auth.log对调试级别的调查如下。

另一个原因是您的主目录可能具有不同于755的权限。

答案 10 :(得分:1)

在我的情况下,它是错误的user:group归属。我解决了设置正确的用户和组的问题:

set bar bazz
set foo bar
echo $foo # bar
echo $$foo # same as echo $bar → bazz

答案 11 :(得分:1)

运行Windows 8.1,我遇到了server refused our key问题。

遵循指南:https://winscp.net/eng/docs/guide_windows_openssh_server 使用Windows登录名usernamepassword进行连接很容易。但是,结合usernameprivate 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

必须创建文件: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.

S-1-5-11是给System的名称。

要修复Bad permissions,请右键单击administrators_authorized_keys文件,转到Security Tab,单击Advanced按钮并删除继承的权限。 然后删除Windows登录用户名以外的所有Group or user names:,例如YourMachineName\usernameusername的权限应为Read AllowWrite Deny其他所有权限均未选中。文件的所有者还应该是YourMachineName\username

这解决了问题。

其他有用的链接:

https://github.com/PowerShell/Win32-OpenSSH/releases

下载OpenSSH-Win32.zip

如何使用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");
    }
}

用您自己的值替换SshHostKeyFingerprintSshPrivateKeyPath

编辑:添加了administrators_authorized_keys文件权限的屏幕快照: enter image description here

OpenSSH SSH Server作为服务运行时,只有System应具有权限。但是,如果在命令提示符下运行sshd.exe,则当前用户应该是列出的唯一用户(读允许,写拒绝)。

答案 12 :(得分:1)

我的天哪,我花了几天的时间来解决这个问题。所以这对我有用。我像这样回到根褶皱: cd / root / mkdir .ssh 光盘.ssh chmod 700 .ssh 纳米-wauthorized_keys 服务SSH重新启动 因此,我使用root来通过Putty进行日志记录,并且有效。因此,请尝试对要在腻子中使用的用户执行相同的操作。

答案 13 :(得分:1)

我在solaris上遇到了同样的错误,但在/var/adm/splunk-auth.log中找到了以下内容:

sshd: [auth.debug] debug1: PAM conv function returns PAM_SUCCESS
sshd: [auth.notice] Excessive (3) login failures for weblogic: locking account.
sshd: [auth.debug] ldap pam_sm_authenticate(sshd-kbdint weblogic), flags = 1
sshd: [auth.info] Keyboard-interactive (PAM) userauth failed[9] while authenticating: Authentication failed

在/ etc / shadow帐户被锁定:

weblogic:*LK*UP:16447::::::3

删除&#34; * LK *&#34;部分:

weblogic:UP:16447::::::3

我可以像往常一样使用ssh和authorized_keys。

答案 14 :(得分:1)

在我的情况下,我不得不在Centos6.6上禁用SELinux以使其正常工作:)

编辑/ etc / selinux / config并设置以下内容,然后重新启动主机。

selinux=disabled
BTW ......忘了提到我必须设置LogLevel = DEBUG3来识别问题。

答案 15 :(得分:1)

对于那些从Windows Server收到此错误的人,我收到了同样的错误,这是一个用户帐户问题。对于许多组织,管理员的组策略可能不允许设置SSH服务器和连接。使用这种类型的设置,必须从本地管理员帐户完成。如果您确认公钥中没有任何拼写错误,可能值得研究。

答案 16 :(得分:0)

添加密钥后,如果您使用的是Amazon Linux计算机,则以ec2-user登录

答案 17 :(得分:0)

我在尝试登录Mobaxterm时遇到了类似的问题。私钥是通过puttygen生成的。在我的案例中,重新生成密钥有帮助。

答案 18 :(得分:0)

检查您的密钥,今天应该是rsa(id_rsa.pub)密钥,而不再是dss(id_dsa.pub)密钥,使用puttygen 0.70并在密钥类型上选择RSA来生成,替换主机上的公钥〜/ .ssh / authorized_keys

答案 19 :(得分:0)

根据我的经验,我建议您应该从腻子生成密钥,而不应该从linux端生成密钥。因为密钥将是旧的PEM格式。无论如何,只是我的建议。我按照下面的步骤进行操作,并与我以及与我的团队合作得很好。

  1. 使用本地的PuTTYGen.exe生成密钥对(类型:RSA,长度:2048位)。

  2. 将私钥/公钥另存为本地文件中的“ id_rsa.ppk / id_rsa.pub ”文件。

  3. 在本地创建“ authorized_keys”文件,然后在“ id_rsa.pub ”中将公共密钥输入到“ authorized_keys ”。 请记住,内容必须以“ ssh-rsa ”和仅一行开头。

enter image description here

  1. 使用WinScp(或putty命令)将“ authorized_keys&id_rsa.pub ”从本地复制到linux-user-home“ /home/$USER/.ssh/ < / strong>”。

enter image description here

  1. 运行以下命令:

    chmod 700 .ssh

    chmod 600 .ssh / authorized_keys

    chown $ USER:$ USER .ssh -R

  2. 通过在PuTTY.exe配置文件中加载私钥“ id_rsa.ppk ”来测试连接设置,然后单击“打开”(如果有密码,则输入密码)。

    < / li>

enter image description here

enter image description here

答案 20 :(得分:0)

修复根安装的步骤(随后我更改了ec2-user文件夹和授权密钥文件的权限) 此过程类似于拆卸和安装笔式驱动器

以下是您可能遇到的其他一些情况-

  
      
  1. 您使用的是SSH私钥,但相应的公钥不在authorized_keys文件中。
  2.   
  3. 您无权访问authorized_keys文件。
  4.   
  5. 您没有.ssh文件夹的权限。
  6.   
  7. 您的authorized_keys文件或.ssh文件夹名称不正确。
  8.   
  9. 您的authorized_keys文件或.ssh文件夹已删除。
  10.   

修复它们的步骤

  • 停止有问题的Ec2实例
  • 分离根卷(/ dev / sda1)
  • 创建ec2实例或使用正在运行的实例
  • 将分离的卷(/ dev / sdvf)安装到新的ec2实例

现在,登录新的ec2后,请按以下步骤运行

  • Lsblk命令-列出所有可用的挂载
  • 从有问题的实例中选择要卸载的安装值
  • 作为ec2-user运行“ sudo mount / dev / mapper / rootvg-home / mnt” sudo mount /dev/mapper/rootvg-home /mnt
  • 然后将目录更改为/ mnt
  • 进行所有必要的更改

现在,我们已经解决了所面临的问题。通常可能是用户权限问题 -卸载/ mnt以卸载它 -现在转到控制台,指向附加到新实例的卷并将其分离 -分离后,将其作为/ dev / sda1

附加到新卷上

话虽如此,您应该能够成功登录

答案 21 :(得分:0)

就我而言,问题是这样的,在生成ssh密钥的过程中,我有意更改了密钥的默认目录。因此,我选择使用~/home/user/folder1/.ssh/authorized_keys而不是使用〜/ .ssh / authorized_keys位置,为了使这些更改生效,我应该对文件/etc/ssh/sshd_config上的新位置进行相同的更改。但是直到意识到这一点之前,我已经尝试过其他人建议的几种解决方案,包括将主文件夹的权限设置为700,将.ssh目录的权限设置为600

答案 22 :(得分:0)

对我有用的是:

  • 停止了ec2实例
  • 分离音量
  • 使用相同的密钥将卷与旧实例连接,并能够进行SSH
  • 将卷安装到某些临时文件夹中
  • 检查了目录mount_point / home / ec2-user / .ssh / authorized_keys中的文件
    • 理想情况下,此文件需要提供我们的密钥信息,但对我而言,此文件为空
  • 将旧实例的authorized_keys文件复制到新安装的卷
  • 卸载设备
  • 重新附加到原始ec2实例
  • 启动它,并使其通过运行状况检查

这一次对我有用。但是我不知道为什么启动实例时一开始它没有我的密钥文件信息。还要检查此链接https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingMindTerm

答案 23 :(得分:0)

如果您在/var/log/secure

中遇到此错误
  

错误:key_read:key_from_blob AA
  AAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG + rKz93l7em1BsUBzjHPMsswD

这意味着您的密钥有空间,如果您在查看.ppk文件时通过puttgen生成了密钥,则它将如下所示:

AAAAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG+rKz93l7em1BsUBzjHPMsswD
al74MLaJyhQD0pE23NS1izahbo1sJGnSJu2VJ//zxidSsba6xa6OvmeiKTwCz0E5
GMefdGVdpdbTlv99qjBl1+Nw1tDnHIC0+v9XmeZERQfCds9Kp1UivfReoYImntBC
gLtNyqRYrSu8csJCt7E1oY8QK6WP1vfYgAQ2taGyS9+g7FHyyf5VY2vH3oWzzbqz
xjsSLAv3zEQSm1LzSw9Pvc8iwasFyUMBOPj31CKQYTXyX8KpJTr0Zb7oqMauBE5L
VwxZhlcJHbj0FsMbF/+GRjvgexymCi3bHmwGQ6FEADNd0RkhdQ==

,当您尝试粘贴时,您会在读取密钥时遇到错误,因此请尝试编辑密钥并将其设置为一行然后尝试

这看起来应该像

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG+rKz93l7em1BsUBzjHPMsswDal74MLaJyhQD0pE23NS1izahbo1sJGnSJu2VJ//zxidSsba6xa6OvmeiKTwCz0E5GMefdGVdpdbTlv99qjBl1+Nw1tDnHIC0+v9XmeZERQfCds9Kp1UivfReoYImntBCgLtNyqRYrSu8csJCt7E1oY8QK6WP1vfYgAQ2taGyS9+g7FHyyf5VY2vH3oWzzbqzxjsSLAv3zEQSm1LzSw9Pvc8iwasFyUMBOPj31CKQYTXyX8KpJTr0Zb7oqMauBE5LVwxZhlcJHbj0FsMbF/+GRjvgexymCi3bHmwGQ6FEADNd0RkhdQ== username@domainname

答案 24 :(得分:0)

使用Cpanel时,您可以检查密钥是否已获得授权

SSH访问&gt;&gt;公钥&gt;&gt;管理&gt;&gt;授权或取消授权。

答案 25 :(得分:0)

我遇到此问题,其中sshd仅从authorized_keys2读取。

复制或重命名文件为我解决了问题。

cd  ~/.ssh
sudo cat authorized_keys >> authorized_keys2

P.S。我在Windows上使用Putty并使用PuTTyKeygen生成密钥对。

答案 26 :(得分:0)

我已经解决了这个问题,puttygen是第三方软件,由它生成的ssh密钥没有直接使用,所以你必须做一些改动。 例如,它看起来像这样

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170502"
AAAAB3NzaC1yc2EAAAABJQAAAQEAr4Ffd3LD1pa7KVSBDU+lq0M7vNvLp6TewkP7
*******C4eq1cdJACBPyjqUCoz00r+LqkGA6sIFGooeVuUXTOxbYULuNQ==
---- END SSH2 PUBLIC KEY ---- 
我在中间省略了一些字母,替换为*,如果没有,StackOverflow告诉我代码格式错误,不要让我发帖。

这是我的puttygen生成的ssh密钥,你必须改为这个

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAr4Ffd3LD1pa7KVSBDU+lq0M7vNvLp6TewkP7wfvKGWWR7wxA8GEXJsM01FQw5hYWbNF0CDI7nCMXDUEDOzO1xKtNoaidlLA0qGl67bHaF5t+0mE+dZBGqK7jG9L8/KU/b66/tuZnqFqBjLkT+lS8MDo1okJOScuLSilk9oT5ZiqxsD24sdEcUE62S8Qwu7roVEAWU3hHNpnMK+1szlPBCVpbjcQTdiv1MjsOHJXY2PWx6DAIBii+/N+IdGzoFdhq+Yo/RGWdr1Zw/LSwqKDq1SmrpToW9uWVdAxeC4eq1cdJACBPyjqUCoz00r+LqkGA6sIFGooeVuUXTOxbYULuNQ== yourname@hostname

就我而言,我删除了一些评论,例如

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170502"
---- END SSH2 PUBLIC KEY ----

并在开头添加ssh-rsa,  最后添加yourname@hostname。  注意:不要删除最后一个==,您必须更改&#34; yourname&#34;和&#34;主机名&#34;对于你,在我的情况下,是uaskh@mycomputer,你的名字是你要登录你的vps。当所有这些事情都完成后,你可以将公钥上传到uaskh的家{{1} } ~/.ssh/authorized_keys然后cat public-key >> ~/.ssh/authorized_keys sudo chmod 700 ~/.ssh然后您必须修改/ etc / ssh / sshd_config,sudo chmod 600 ~/.ssh/authorized_keys RSAAuthentication yes PubkeyAuthentication yes我的操作系统是CentOS 7,这是我第一次回答问题,我会尽力去做,谢谢!

答案 27 :(得分:0)

在我的案例中,nfs上的家是777,需要750.这解决了这个问题。

答案 28 :(得分:0)

我在psftp中使用了PUTTYgen文件,当我们需要为客户端创建新密钥时,我在Windows Server上遇到了这个问题。 private_key_name .ppk文件和open_ssh.txt文件必须位于同一目录中才能使连接正常工作。

答案 29 :(得分:-1)

另一个原因可能是authorized_keys文件中的UTF-8 BOM