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


86

我使用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和chmod以及正确设置密钥的格式。我已经完成了所有这些操作,但仍然出现“拒绝我们的键”错误,并且我没有主意。


2
您是否告诉Putty使用相同的密钥?您是否以同一用户登录?这是默认的SSH安装,还是您修改了sshd_config?
Noam Rathaus 2014年

Puttygen生成3个密钥:私有密钥,公共密钥以及它自己的私有密钥版本,扩展名为.ppk。我当然使用.ppk和putty.exe,并将公钥粘贴到服务器上的.ssh / authorized_keys中。这是默认的SSH安装/配置,我没有修改sshd_config。
PawelRoman 2014年

顺便说一句,我必须创建.ssh目录和auhtorized_keys,因为它是Ubuntu的全新安装,并且不存在。也许这与问题有关?
PawelRoman 2014年

3
确保sshd_config文件配置为使用公共密钥,它可能不是
诺姆市政厅

2
您在/var/log/auth.log中看到任何内容吗?增加SSH日志的LogLevel到DEBUG,看看是否可以看到已记录的任何问题,如果仍然不能显示您正在访问,则说明您在错误的日志文件中查找
Noam Rathaus 2014年

Answers:


61

好的,我的钥匙上有一个小错字。显然,在粘贴文件时,第一个字母被截断,并且以sh-rsa而不是ssh-rsa开头。

nrathathaus-您的答案非常有帮助,非常感谢,这个答案归功于您:)我的确像您说的那样,并在sshd_conf中进行了设置:

LogLevel DEBUG3

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


7
完全一样的问题:)
Trefex 2014年

您检查了哪些日志,它们在哪里?您在说什么标识符?
user1046647

3
@ user1046647LogLevel在中定义/etc/ssh/sshd_config/var/log/auth.log除非在中另有定义,否则默认日志是sshd_config
Axel Kemper 2015年

3
如果您在vim中打开authorized_key并立即尝试从“ ssh_rsa”中粘贴第一个“ s”,则视为vim命令,之后vim将切换到插入模式,并粘贴其余文本。粘贴(例如使用i)开头的's'不会被剪切
Pawel

1
sudo service ssh restart使更改生效。否则,我的身份验证日志文件中没有任何内容。
hogan

30

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

首先,如接受答案中所述,进行编辑

/etc/ssh/sshd_config

并设置日志级别:

LogLevel DEBUG3

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

/var/log/secure

它将出现您要查找的错误。


/var/log/存在,但secure不存在。如何发现要写入哪个日志?
aliteralmind 2014年

11
/var/log/auth.log至少在我的Ubuntu 14.04.1。中,默认值为。
Axel Kemper 2015年

是!谢谢!原来我的发布密钥文件的末尾有一个不可见的\ n
alextsil

1
Linux / Ubuntu非常令人沮丧。花了20分钟时间试图弄清楚为什么没有secure文件,然后在这里阅读@axel注释。
JYelton

17

就我而言,我还必须将/ home / user的权限也从0755更改为0700。


1
这就是我的原因和解决方案
pstanton '16

4
而我自己的文件夹700和authorized_keys 600解决了该问题
David Soussan

1
对我来说,ss文件夹上的chmod 700和authorized_keys上的chmod 600也解决了这个问题
Iwo Kucharski

.ssh文件夹700和授权密钥600为我修复了它。
深B

13

就我而言,是一个权限问题。

我将日志级别更改为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.ssh目录
  • 将权限更改为 600的的authorized_keys文件。

那行得通。

另一件事是,即使启用了root登录,我也无法root上班。最好使用另一个用户。


这个答案投票不足。主目录的被忽略的权限可能会使您花费一整天的时间进行故障排除。
chingNotCHing

感谢您为我投票。我只是分享我得到的。
WesternGun

6

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

按照指南进行操作:https : //winscp.net/eng/docs/guide_windows_openssh_server 使用Windows登录名username和进行连接很容易password。但是,与username结合使用private key,响应为server refused our key

使它与公钥一起使用归结于文件上的权限: C:\ProgramData\ssh\administrators_authorized_keys

这是一个有用的页面: https //github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps

停止两个OpenSSH的服务,然后打开一个command promptadmin 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-8BOM。没有测试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按钮并删除继承的权限。然后删除Group or user names:Windows登录用户名以外的所有用户名,例如:YourMachineName\username 该用户名的权限username应为Read AllowWrite Deny其他所有内容均未选中。文件的所有者还应该是YourMachineName\username

这解决了问题。

其他有用的链接:

从以下位置下载OpenSSH-Win32.zip: https://github.com/PowerShell/Win32-OpenSSH/releases

如何使用WinSCPnet.dll与OpenSSH服务器建立连接的C#示例: https

以下是使用进行连接的代码段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文件权限的屏幕截图: 在此处输入图片说明

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


3
您在这里做了很多帮助。首先在命令行上运行带调试标志的sshd。Windows Service System日志显示很少,并且完全无用进行调试。其次,主要事实是,作为管理员,存在一个错误,该错误仅在administrators_authorized_keys文件中查找,而不在authorized_keys的预期Users .ssh文件夹中查找(每个人在Windows上运行sshd时都会感到沮丧)。最后是ProgramData中的“ ssh”文件夹!我想知道它将服务器证书等放在哪里。因此,只有大约一天的时间,您的信息才对我有所帮助。谢谢!
詹姆士大师

这个答案是唯一在新的EC2实例Windows 2019免费版上为我工作的答案。
yolob

3

我正在添加此答案,以帮助像我这样花费大量时间搜索互联网而没有成功的任何人。

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

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

ls -A

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

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


3

我发现的简单解决方案是将authorized_keys文件从隐藏的.ssh目录中移开,然后将其放入系统ssh目录中:

/etc/ssh/keys/authorized_keys

我这样做后就没有问题了。


3

在Windows Server 2008 R2中遇到相同的问题,并探索了很多解决方法,最后通过以下操作做到了这一点:

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

从以下各行中删除注释,删除后它们应如下所示:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

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


ssh有时安装了w / authorizedkeysfile行注释掉了,所以它不知道在哪里寻找授权密钥文件:-(
kenyee

authorized_keys文件需要哪些权限?它是否必须在用户目录或OpenSSH目录中?
GarfieldKlon

它应该位于OpenSSH目录或您安装OpenSSH的位置。您应该能够找到它
Ravi Anand '18

确保您正在使用管理员帐户进行设置。
拉维·阿南德

2

感谢nrathaus并/var/log/auth.log在调试级别进行了以下调查。

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


您的主目录应为700,这是CentOS上的默认目录。
karatedog

2

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


1
这里类似:从PuttyGen复制时,在“ ssh-rsa”之后和密钥之后有新行。删除它们后,它起作用了。
Lucian P.

1

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


1

就我而言,我必须在Centos6.6上禁用SELinux才能使其工作:)

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

selinux=disabled

顺便说一句...忘了提到我必须设置LogLevel = DEBUG3来识别问题。


1
可以禁用.ssh文件夹上的安全上下文,而不是禁用SELinux。chcon这个-R -t ssh_home_t的.ssh
palehorse

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

删除了“ * LK *”部分:

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

而且我可以像往常一样将ssh与authorized_keys一起使用。


1

就我而言,它是由(/etc/ssh/sshd_config)引起的:

PermitRootLogin no

更改为yes,重新启动服务并正常进入。


1

我已经解决了这个问题,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,最后添加。 注意==最后不要删除,必须为您更改“您的名称”和“主机名”,以我uaskh@mycomputer为例,您的名称是您要登录vps。所有这些操作完成后,您可以上传公共-到uaskh的家~/.ssh/authorized_keys的钥匙,cat public-key >> ~/.ssh/authorized_keys那么sudo chmod 700 ~/.ssh sudo chmod 600 ~/.ssh/authorized_keys您必须修改/ etc / ssh / sshd_config,RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys我的操作系统是CentOS 7,这是我第一次回答问题,我将尽我所能,谢谢!


1
@Ronak Bhatt,谢谢您的努力,我尝试使代码更清晰,因为我使用ctrl + K编写了所有这些代码,但是StackOverflow告诉我“您的答案包含代码,请使用正确的格式”,我不为什么书面和提交的内容有所不同,我无法提交答案,这导致我不得不逐行在“代码”中添加代码。我想,我将学习降价格式。

在当前版本中,PuttyGen将以正确的格式显示用于复制和粘贴的公钥。因此,不再需要手动将腻子发布密钥转换为正确的格式。
Erik Kalkoken

1

哦,天哪,我花了几天的时间来解决这个问题。所以这对我有用。我回到了这样的根目录:cd / root / mkdir .ssh cd .ssh chmod 700 .ssh nano -wauthorized_keys服务ssh restart因此,我使用root通过Putty进行日志记录,并且可以正常工作。因此,请尝试对要在腻子中使用的用户执行相同的操作。


0

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


0

以我为例,在nfs上的家是777,需要是750。这解决了问题。


0

我有这个问题,其中sshd仅从 authorized_keys2

复制或重命名文件对我来说解决了这个问题。

cd  ~/.ssh
sudo cat authorized_keys >> authorized_keys2

PS我使用Windows的Putty,并使用PuTTyKeygen生成密钥对。


0

尝试通过Mobaxterm登录时,我遇到了类似的问题。私钥是通过puttygen生成的。对我而言,重新生成密钥很有帮助。


0

使用Cpanel时,您可以检查密钥是否在

SSH访问>>公共密钥>>管理>>授权或取消授权。


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


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


0

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


0

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

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

  1. 您正在使用SSH私钥,但相应的公钥不在authorized_keys文件中。
  2. 您没有对authorized_keys文件的权限。
  3. 您没有.ssh文件夹的权限。
  4. 您的authorized_keys文件或.ssh文件夹名称不正确。
  5. 您的authorized_keys文件或.ssh文件夹已删除。

修复它们的步骤

  • 停止有问题的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
  • 进行所有必要的更改

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

这样说,您应该可以成功登录


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 ”开头,只有一行

在此处输入图片说明

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

在此处输入图片说明

  1. 运行以下命令:

    chmod 700 .ssh

    chmod 600 .ssh / authorized_keys

    chown $ USER:$ USER .ssh -R

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

在此处输入图片说明

在此处输入图片说明


0

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


0

添加密钥后,就像ec2-user使用Amazon Linux计算机一样登录


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.