bes*_*ico 6 ssh putty key-authentication puttygen public-key-authentication
我试图设置一个简单的备份脚本来自动运行,它可以通过 SSH 将文件从 Windows 机器复制到 Linux 机器。
正如许多简单的在线教程所建议的那样,我使用pscp
了生成的私钥puttygen
,并将相应的公钥(由 putty 本身以复制/粘贴形式呈现)放置authorized_keys
在 Linux的文件中。考虑到它可以在其他 2 台 Windows 机器和具有相同配置的不同 Linux 机器上工作,这似乎非常简单。
考虑到我能够以 root 身份登录到 Linux 机器,AFAICS 没有连接问题,ssh 也是如此。配置文件 ( sshd_config
)AuthorizedKeysFile
设置为~/.sshd/authorized_keys
.
错误“服务器拒绝了我们的密钥”不断出现,无论我做什么......日志没有显示任何身份验证问题......
我打算做更多的测试并将logLevel
值设置为VERBOSE
or DEBUG2
,3
但考虑到问题的紧迫性以及为了在机器上实际测试它我必须经历很多麻烦考虑到机器处于离我实际工作地点很远的地方......
看起来这实际上可能是与 ssh 版本或类似问题有关的问题...
我还考虑了我需要将公钥插入authorized_keys
到用户.ssh
目录 ( /user/.ssh/
)内的文件中的可能性,除了将它放在 root 的文件夹中(因为AuthorizedKeysFile
in的值没有多大意义sshd_config
)。
我已经对 ssh 服务器的LogLevel
set 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
Run Code Online (Sandbox Code Playgroud)
似乎该程序正在尝试authorized_keys
使用所有者的权限打开该文件,但是没有关于产生问题的原因的更多信息。最后一件事,我已经检查并仔细检查了文件和文件夹权限,它们都没有问题。
小智 10
我知道的一些可能的原因与文件权限有关,这些原因大多太宽了,特别是我能回忆起两个原因
.ssh
和/或 authorized_keys 文件权限(如果超过,则将它们分别设置为 700/600)如果您在服务器上具有 root 访问权限,则可以通过在另一个端口上使用调试和非守护程序选项启动额外的 sshd 服务器来拒绝密钥的确切原因,您可以运行:
sudo `which sshd` -p 2020 -Dd
Run Code Online (Sandbox Code Playgroud)
在服务器上
离开运行后运行 ssh 到它:
ssh -p 2020 -i /path/to/refusedkey
Run Code Online (Sandbox Code Playgroud)
服务器输出会告诉你拒绝的原因
小智 5
跑步:
sudo `which sshd` -p 2020 -Dd
Run Code Online (Sandbox Code Playgroud)
在一个会话中以 root 身份运行,并在另一个会话中运行:
ssh -p 2020 -i /path/to/refusedkey refusedkeyusername@hostname
Run Code Online (Sandbox Code Playgroud)
为我工作以找出原因。我的用户 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]
Run Code Online (Sandbox Code Playgroud)
一些明显的检查
authorized_keys ssh-rsa AA...long_line_of_char comment
putty 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/bar
dir 中。
authorized_keys.root
在root文件中
authorized_keys.user
在用户文件中,文件归 root 所有