我试图设置一个简单的备份脚本来自动运行,通过 SSH 将文件从 Windows 计算机复制到 Linux 计算机。
正如许多简单的在线教程建议的那样,我使用了pscp
生成的私钥,puttygen
并将相应的公钥(由 putty 本身以复制/粘贴形式呈现)放置在authorized_keys
Linux 中的文件中。考虑到它在另外 2 台 Windows 计算机和另一台具有相同配置的 Linux 计算机上运行,这似乎非常简单。
考虑到我能够以 root 身份登录 Linux 机器,AFAICS 不存在连接问题,ssh 也是如此。配置文件 ( sshd_config
) 设置AuthorizedKeysFile
为~/.sshd/authorized_keys
.
无论我做什么,错误“服务器拒绝我们的密钥”不断出现...日志没有显示任何身份验证问题...
我计划进行更多测试并将值设置logLevel
为VERBOSE
orDEBUG2
或3
,但考虑到问题的紧迫性以及事实上,为了在机器上实际测试它,考虑到机器处于 a 状态,我必须经历很多麻烦。离我实际工作的地方比较远...
问题
- 有人有什么想法吗?
- 有人遇到过这种情况吗?
看来这实际上可能是与 ssh 版本或类似问题相关的问题......
我还考虑了除了将公钥放在根文件夹中之外,还需要将公钥插入到authorized_keys
用户.ssh
目录 ( ) 内的文件中的可能性(由于in/user/.ssh/
的值,这没有多大意义)。AuthorizedKeysFile
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
看起来该程序正在尝试使用authorized_keys
所有者的权限打开该文件,但是没有更多关于产生问题的信息。最后一件事,我已经检查并仔细检查了文件和文件夹权限,它们都没有问题。
答案1
我知道的一些可能的原因与文件权限有关,这些原因大多太宽泛,特别是我可以回忆起两个原因
- 将 /home/user 目录暴露给所有者以外的其他人
.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 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 所有
答案4
好的!原因之一是 passwd 文件中的用户主目录不是您要从中复制文件的目录。只有 root 可以从每个软件复制,其他用户不能!
例如,如果要从 /backup 目录复制,请确保要验证的用户将主目录设置为 /backup (由其拥有),以便 scp 找到授权密钥“/backup/.ssh/”的正确路径授权密钥”
第二:确保将 Putty 密钥生成器中带有“ssh-rsa AA....”的文本准确复制到authorized_keys 文件中的一行中。您可以从末尾删除任何注释,例如“rsa-key-xxx..”。 authorized_keys 文件必须拥有用户/组,祝你好运!