SSH 公钥不会发送到服务器

SSH 公钥不会发送到服务器

我已经为此苦苦挣扎了几个小时,所以非常感谢任何帮助......

我有 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_rsaid_rsa.pub

如果您想使用其他文件名,则必须在中指定它们ssh_config(使用IdentityFile设置)或通过 ssh命令行 范围-i

相关内容