SSH公钥不会发送到服务器


33

我已经为此苦苦挣扎了两个小时,因此我们将不胜感激。

我有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

2
请给我们输出ls -la /root/.ssh/
mreithub,2014年

@mreithub感谢您的快速回复-上面已添加。
丹尼2014年

3
尝试删除_tm1从您的密钥文件名(即mv id_rsa_tm1 id_rsamv id_rsa_tm1.pub id_rsa.pub
mreithub

@mreithub可行!非常感谢您,但是我不明白为什么我不能在文件名后附加其他字符串。我在iMac上这样做可以毫无问题地连接到服务器...即,我可以毫无问题地使用id_rsa.tm1.imac.pub。如果我想要多个键怎么办?
丹尼2014年

Answers:


22

看看您的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选项可能是最简单的选择。


26

目标主机上格式错误的authorized_keys文件是ssh输出“我们未发送数据包”消息并要求输入密码而不是使用pubkey auth的另一个原因:

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
谢谢,每次出现此错误都是因为远程主机(服务器)上的authorized_keys文件格式错误。我希望该错误不会听起来像客户端存在问题。
tamale

3
粘贴到vim中,无需先按“ i”!
乔丹·戴维森

对我来说,它似乎没有格式错误,但是我删除了该文件,然后从源计算机中再次执行ssh-copy-id来重新创建它。问题解决了。
alvarez

14

问题中错误消息的确切字符串也可能在本地端的私钥/公钥对丢失匹配的情况下发生。不,这没有任何意义,但我只是扯了很长一段时间,试图弄清到底是怎么回事。

  • 远程系统A已.ssh/mykey.pub复制到中.ssh/authorized_keys
  • 本地系统B具有.ssh/mykey与系统A的公共密钥相匹配的正确私钥,但是还具有.ssh/mykey.pub未匹配的文件,可能是替换密钥的先前版本。

从B到A(ssh -i mykey A)的SSH 将失败,并显示问题消息,尤其是如果您-vv从ssh客户端打开,则将看到:

尝试私钥:.ssh / mykey
我们没有发送数据包,请禁用方法

这是一个谎言,因为没有尝试实际的密钥,它显然使用了具有匹配名称的本地公共密钥文件来确定它是否可能起作用,然后在它们不匹配时实际上什么也没做。双方的调试信息都没有真正提示问题。


哇!这个人也为我杀死了很多时间!掉了一些头发!因此,在我的情况下也是这样,只有我的发布密钥确实在客户端的authorized_keys文件中,只是它的末尾包含了一个name @ host条目,而我的sshd主机却没有。我没有意识到您需要在每一端都匹配authorized_key,实际上,我认为我以前从未匹配过它们。仅当我的客户端是CentOS 7且连接到Ubuntu 12.04时,这才是问题。从MacOS或其他Ubuntu系统运行正常。
gregthegeek

那么如何解决这个问题呢?您已经将我的问题描述为T。由于我在许多系统之间进行了跨越式设计,因此我的问题进一步恶化了。实际上指定的文件对我
不起作用

@Madivad您可以通过在本地匹配公钥/私钥(或根本没有公钥)来解决此问题。
卡勒布

@Caleb听起来比它要简单得多,除非(并且我认为一分钱都掉了),这意味着我应该将公钥和私钥都复制到要用作SSH客户端的每个系统上吗?我曾尝试创建一个IdentityFile,但显然我使用的是错误的
Madivad

删除客户端上孤立的id_rsa.pub文件对我来说解决了这个问题。我只是在连接到Ubuntu 12.04服务器的新Centos 7客户端上再次遇到此问题。authorized_keys name @ host问题尚未解决。我匹配了目录,权限,完全相同的id_rsa密钥文件,但还有一个额外的id_rsa.pub(在客户端)。已删除,现在可以使用。我运行过ssh-keygen来快速创建目录,然后从已知的良好系统进行rsync。但这留下了一个与任何私钥都不匹配的额外的pub文件(它不在源rsync上)。我重新添加了不匹配的发布文件以进行验证。确保匹配或删除。
gregthegeek

5

ssh寻找的默认文件名为are id_rsaid_rsa.pub

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


4

我在RedHat上遇到过同样的问题;检查日志,发现主目录具有错误的用户权限。

sshd[2507]: Authentication refused: bad ownership or modes for directory /home/user

修复主目录权限可以解决此问题。


4
欢迎来到U + L Stack Exchange网站。您可以通过提供正确的权限外观示例来使您的答案对其他人更有帮助。
Erathiel

~/.sshdir 外,我有一个非常相似的问题。至少在~/.ssh权限为0775的Fedora 28上,我无法使用公钥/私钥进行连接。因此,我将权限更改为0755,并像一种魅力一样工作:)
PovilasB

3

在Debian / Ubuntu中调试的一种简单方法是:用密码连接并记录日志

尾-f /var/log/auth.log

尝试从另一个终端连接,您将看到错误...

在我的情况下,/ root目录是770,而不是默认的700。错误是“身份验证被拒绝:目录/ root的所有权或模式错误”

解决此问题,您就完成了。


谢谢你,伙计!你救了我的一天!
安东尼

这有助于澄清这一点。我的用户不允许来自123.123.123.123的诸如此类的用户,因为未在AllowUsers中列出。非常感谢!
aexl


0

跑步后

ssh-copy-id user@remote-host

通常它应该工作。但是,如果失败,请尝试以下操作:以您以后要登录的用户身份登录到远程主机并运行:

ssh-keygen

它帮助了我。


0

因此对我来说,发生了什么事,我有2台VM可从本地计算机访问(2个键id_rsa.pub和id_rsa2.pub)。我意识到我的ssh连接默认将id_rsa.pub用于任何ssh user@xx.xx.xx.xx连接。我通过添加配置文件并指定用于每个主机的身份来解决我的问题,如下所示:

vi ~/.ssh/config

Add both hostnames and their identity file as follows:

Host server1.nixcraft.com
  IdentityFile ~/Users/.ssh/id_rsa1
Host server2.nixcraft.com
  IdentityFile /backup/home/aymen/.ssh/id_rsa2

-2

客户:

vim /etc/ssh/ssh_config

#add your key 
IdentityFile ~/.ssh/yourkey

service sshd restart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.