我已经为此苦苦挣扎了几个小时,所以非常感谢任何帮助......
我有 2 台服务器,我都可以ssh
使用 OSX 的公钥来连接,完全没有问题,所以我确信sshd_config
.
我正在尝试配置一个 cron 作业来rsync
同步两台服务器,并需要ssh
使用公钥将服务器 B(备份)连接到服务器 A。
我一生都无法弄清楚为什么它找不到我的公钥 - 它们位于~/.ssh/
(即/root/.ssh
)并且 A 和 B 上的所有文件权限都是正确的。
这是输出:
debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug3: no such identity: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug3: no such identity: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
另请注意,它正在寻找不存在的私钥......
drwx------. 2 root root 4096 May 25 10:15 .
dr-xr-x---. 4 root root 4096 May 24 18:52 ..
-rw-------. 1 root root 403 May 25 01:37 authorized_keys
-rw-------. 1 root root 0 May 25 01:41 config
-rw-------. 1 root root 1675 May 25 02:35 id_rsa_tm1
-rw-------. 1 root root 405 May 25 02:35 id_rsa_tm1.pub
-rw-------. 1 root root 395 May 25 02:36 known_hosts
答案1
目标主机上格式错误的authorized_keys 文件是 ssh 输出“我们没有发送数据包”消息并要求输入密码而不是使用 pubkey 身份验证的另一个原因:-
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
这种特殊情况下的问题是粘贴到.ssh/authorized_keys
目标主机的公钥数据缺少第一个字符:-
sh-rsa AAAA...
解决方案很简单,添加缺失的“s”。
ssh-rsa AAAA...
所以:-
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...
debug1: Authentication succeeded (publickey).
答案2
看一下你的 ssh 手册页:
-i identity_file
Selects a file from which the identity (private key) for public
key authentication is read. The default is ~/.ssh/identity for
protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.
Identity files may also be specified on a per-host basis in the
configuration file. It is possible to have multiple -i options
(and multiple identities specified in configuration files).
或 ssh_config 手册页:
IdentityFile
Specifies a file from which the user's DSA, ECDSA, ED25519 or
RSA authentication identity is read. The default is
~/.ssh/identity for protocol version 1, and ~/.ssh/id_dsa,
~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for proto‐
col version 2. Additionally, any identities represented by the
authentication agent will be used for authentication unless
IdentitiesOnly is set.
您会看到,如果您不指定密钥,则会尝试一些特殊的文件名。这些也是您在日志输出中看到的文件。
要在具有不同名称的文件中使用密钥,您有以下三个选项:
- 使用上述选项显式指定文件
-i
。 - 使用上述
IdentityFile
选项在客户端配置中配置该文件。 - 使用 将密钥添加到您的代理
ssh-add
。
对于交互式会话,代理是最灵活的。对于您的 cron 作业,该-i
选项可能是最简单的一个。
答案3
如果私钥/公钥对不匹配,也可能会出现问题中的这一串错误消息在本地端。不,这没有任何意义,但我只是费了很长时间想弄清楚发生了什么。
- 远程系统 A 已
.ssh/mykey.pub
复制到.ssh/authorized_keys
. - 本地系统 B 具有
.ssh/mykey
与系统 A 的公钥相匹配的正确私钥,但也有一个.ssh/mykey.pub
不匹配的文件,可能是替换密钥的先前版本。
从 B 到 A ( ) 的 SSH将失败并出现问题中的消息,最值得注意的是,如果您从 ssh 客户端ssh -i mykey A
打开,您将看到:-vv
尝试私钥:.ssh/mykey
我们没有发送数据包,禁用方法
这是一个谎言,因为没有尝试实际的密钥,它显然使用具有匹配名称的本地公钥文件来确定它是否可能起作用,然后当它们不匹配时实际上没有执行任何操作。任何一方的调试信息都没有真正暗示问题所在。
答案4
ssh 正在查找的默认文件名是id_rsa
和id_rsa.pub
。
如果您想使用其他文件名,则必须在中指定它们ssh_config
(使用IdentityFile
设置)或通过 ssh命令行
范围-i
。