SSH:“服务器拒绝我们的密钥”无缘无故

SSH:“服务器拒绝我们的密钥”无缘无故

我试图设置一个简单的备份脚本来自动运行,通过 SSH 将文件从 Windows 计算机复制到 Linux 计算机。

正如许多简单的在线教程建议的那样,我使用了pscp生成的私钥,puttygen并将相应的公钥(由 putty 本身以复制/粘贴形式呈现)放置在authorized_keysLinux 中的文件中。考虑到它在另外 2 台 Windows 计算机和另一台具有相同配置的 Linux 计算机上运行,​​这似乎非常简单。

考虑到我能够以 root 身份登录 Linux 机器,AFAICS 不存在连接问题,ssh 也是如此。配置文件 ( sshd_config) 设置AuthorizedKeysFile~/.sshd/authorized_keys.

无论我做什么,错误“服务器拒绝我们的密钥”不断出现...日志没有显示任何身份验证问题...

我计划进行更多测试并将值设置logLevelVERBOSEorDEBUG23,但考虑到问题的紧迫性以及事实上,为了在机器上实际测试它,考虑到机器处于 a 状态,我必须经历很多麻烦。离我实际工作的地方比较远...

问题

  • 有人有什么想法吗?
  • 有人遇到过这种情况吗?

看来这实际上可能是与 ssh 版本或类似问题相关的问题......

我还考虑了除了将公钥放在根文件夹中之外,还需要将公钥插入到authorized_keys用户.ssh目录 ( ) 内的文件中的可能性(由于in/user/.ssh/的值,这没有多大意义)。AuthorizedKeysFilesshd_config

我已经对 ssh 服务器的LogLevelset o进行了一些测试VERBOSE,但我无法检索信息(责任问题),因此这里是来自另一个源的输出/调试日志,它似乎显示相同的错误...

Connection from 192.168.0.101 port 4288
debug1: Client protocol version 2.0; client software version OpenSSH_4.5
debug1: match: OpenSSH_4.5 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.5
debug1: permanently_set_uid: 22/22
debug1: list_hostkey_types: ssh-rsa,ssh-dss
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST received
debug1: SSH2_MSG_KEX_DH_GEX_GROUP sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_INIT
debug1: SSH2_MSG_KEX_DH_GEX_REPLY sent
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: KEX done
debug1: userauth-request for user dcowsill service ssh-connection method none
debug1: attempt 0 failures 0
debug1: PAM: initializing for "dcowsill"
debug1: userauth-request for user dcowsill service ssh-connection method publickey
debug1: attempt 1 failures 1
debug1: test whether pkalg/pkblob are acceptable
debug1: PAM: setting PAM_RHOST to "192.168.0.101"
debug1: PAM: setting PAM_TTY to "ssh"
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
Failed publickey for dcowsill from 192.168.0.101 port 4288 ssh2
debug1: userauth-request for user dcowsill service ssh-connection method publickey
debug1: attempt 2 failures 2
debug1: test whether pkalg/pkblob are acceptable
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
Failed publickey for dcowsill from 192.168.0.101 port 4288 ssh2
Connection closed by 192.168.0.101

看起来该程序正在尝试使用authorized_keys所有者的权限打开该文件,但是没有更多关于产生问题的信息。最后一件事,我已经检查并仔细检查了文件和文件夹权限,它们都没有问题。

答案1

我知道的一些可能的原因与文件权限有关,这些原因大多太宽泛,特别是我可以回忆起两个原因

  1. 将 /home/user 目录暴露给所有者以外的其他人
  2. .ssh和/或authorized_keys文件权限(如果超过这个值,则分别将它们设置为700/600)

如果您在服务器上具有 root 访问权限,则可以通过在另一个端口上使用调试和非守护程序选项启动额外的 sshd 服务器来拒绝密钥的确切原因,您可以运行:

sudo `which sshd` -p 2020 -Dd

在服务器上

离开运行状态后,运行 ssh 到它:

ssh -p 2020 -i /path/to/refusedkey

服务器输出会告诉你拒绝的原因

答案2

跑步:

sudo `which sshd` -p 2020 -Dd

在一个会话中以 root 身份运行,并在另一个会话中运行:

ssh -p 2020 -i /path/to/refusedkey refusedkeyusername@hostname

为我工作以找出原因。我的用户 ID 权限未设置为 700。我得到的 O/P 如下

debug1: trying public key file /home/userid/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: **bad ownership** or modes for directory /home/sapadmin
debug1: restore_uid: 0/0
Failed publickey for userid from 172.31.2.12 port 27382 ssh2: RSA 
Connection closed by 172.31.2.12 [preauth]

答案3

一些明显的检查

  • authorized_keys ssh-rsa AA...long_line_of_char commentputty gen 的格式有时会给出另一种形式。

  • 授权:

  • ~user/.ssh/authorized_keys 是 -rw-r--r--

  • ~user/.ssh/ 是 drwx------

  • ~user 不是全局可写的。

  • 密钥应部署在 id ~root 或 ~user 中,具体取决于您连接到的用户。

一些不太明显的检查:

  • root 不允许通过 ssh 访问。 (PermitRootLogin no或评论)

  • 授权密钥的默认位置AuthorizedKeysFile %h/.ssh/authorized_keys

  • 即~用户主目录下的.ssh。

  • authorized_keys 的示例自定义位置AuthorizedKeysFile /foo/bar/authorized_keys.%h

  • 即键,位于/foo/bardir 中。

  • authorized_keys.root在root文件中

  • 在用户文件中authorized_keys.user,文件归 root 所有

答案4

好的!原因之一是 passwd 文件中的用户主目录不是您要从中复制文件的目录。只有 root 可以从每个软件复制,其他用户不能!

例如,如果要从 /backup 目录复制,请确保要验证的用户将主目录设置为 /backup (由其拥有),以便 scp 找到授权密钥“/backup/.ssh/”的正确路径授权密钥”

第二:确保将 Putty 密钥生成器中带有“ssh-rsa AA....”的文本准确复制到authorized_keys 文件中的一行中。您可以从末尾删除任何注释,例如“rsa-key-xxx..”。 authorized_keys 文件必须拥有用户/组,祝你好运!

相关内容