首页 文章

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

提问于
浏览
63

我使用 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并正确格式化密钥 . 我已经做了所有这些仍然'拒绝我们的关键'错误,我没有想法 .

24 回答

  • 3

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

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

    selinux=disabled
    

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

  • 2

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

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

    LogLevel DEBUG3
    

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

  • 0

    添加一些想法作为其他答案有帮助,但不完全适合 .

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

    /etc/ssh/sshd_config
    

    并设置日志级别:

    LogLevel DEBUG3
    

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

    /var/log/secure
    

    它会有你想要的错误 .

  • -2

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

  • 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 权限

    • 更改 .ssh 目录 700 的权限

    • 更改 authorized_keys 文件 600 的权限 .

    这很有效 .

    Another thing is that even I enabled root login, I cannot get root to work. Better use another user.

  • 0

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

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

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

    ls -A
    

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

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

  • 2

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

    /etc/ssh/keys/authorized_keys
    

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

  • 1

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

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

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

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile  .ssh/authorized_keys
    

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

  • 1

    Thanks!

    谢谢 LogLevel DEBUG3 (在我的情况下, CentOS 7 日志在 /var/log/secure

    事实证明我的 .ssh/authorized_keys 模式是 644 而不是 600 ,并且 sshd 觉得单独是禁止的,我终于发现了读取该日志文件!

  • 3

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

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

  • 0

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

  • 3

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

  • 47

    我在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 .

  • 0

    在我的情况下,它是由( /etc/ssh/sshd_config )引起的:

    PermitRootLogin no
    

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

  • 3

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

  • 1

    在我的情况下,家庭在nfs是777,需要750.这解决了问题 .

  • 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 . note :不要在最后删除 == ,你必须为你更改"yourname"和"hostname",在我的情况下,是 uaskh@mycomputer ,你的名字是你要登录你的vps . 当所有这些事情都完成后,你可以上传公钥到了uaskh的主页 ~/.ssh/authorized_keyscat 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,这是我第一次回答问题,我会尽力去做,谢谢!

  • 4

    我有这个问题,其中sshd只读取 authorized_keys2 .

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

    cd  ~/.ssh
    sudo cat authorized_keys >> authorized_keys2
    

    附:我正在使用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实例

    • 启动它并让它通过 Health 检查

    这次对我有用 . 但是,当实例启动时,我首先不会获得我的密钥文件信息 . 检查此链接https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingMindTerm

  • 0

    在我的情况下,问题是这样的,在生成ssh密钥期间,我故意更改了密钥的默认目录 . 因此,我选择使用 ~/home/user/folder1/.ssh/authorized_keys 而不是使用位置〜/ .ssh / authorized_keys,为了使这些更改正常工作,我应该对此文件 /etc/ssh/sshd_config 上的新位置进行相同的更改 . 但在我意识到这一点之前,我已经尝试了其他人在这里建议的几个解决方案,包括将主文件夹的权限设置为 700 和.ssh目录 600 .

  • 20

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

相关问题