将SSH公钥复制到authorized_keys之后,服务器不断询问密码


44

我有一个在云中运行的Ubuntu服务器。我创建了一个用户(git)。在文件夹中/home/git,我创建了.ssh/目录和authorized_keys文件。

但是,当我将SSH公钥放入authorized_keys文件中时,服务器继续询问我密码。

我做错了什么?


您将ypur放在哪里?在用户git或root中?您如何访问?作为ssh <您> @ <服务器> o <git> @ <服务器>或root @ <服务器> ..检查并添加更多信息。
maniat1k 2012年

Answers:


42

在服务器端,ssh守护程序将在中记录错误/var/log/auth.log,因此请检查该文件以查看正在报告的内容。

在客户端,建立连接时,可以添加-v标志(或-vv-vvv)以增加详细程度。您也许可以通过这种方式确定您的问题。

这是要检查的其他事项。

  • 确保/home/git/.ssh/authorized_keys为所拥有git
  • 确保/home/git/.ssh/authorized_keys模式为600(-rw-------)。

还要检查/etc/ssh/sshd_config文件。

  • PubkeyAuthentication 应该设置为 yes
  • 还有一个AuthorizedKeysFile指令,用于确定授权密钥应位于的路径。确保已将其注释掉或使用默认设置%h/.ssh/authorized_keys

谢谢!我将尝试使用此选项,稍后再返回以进行反馈!
路易斯·达莫林

如果看不到/var/log/auth.log文件怎么办?有没有办法打开它?
史蒂夫·罗宾斯

1
如果您没有/var/log/auth.log,则日志可能位于/ var / log / secure中
CoverosGene 2014年

愚蠢的错误,我已经将.pub文件压缩到我要连接的服务器上的.ssh文件夹中。确保将其移动到authorized_keys文件夹中。
CenterOrbit 2014年

我还必须从主目录本身中删除组写入权限。然后,我与sudo service ssh restart
Dylan Pierce

19

还要确保您的用户主目录(在您的情况下为/ home / git)只能由您写。我曾经遇到过这个问题,因为我的主目录是可写的。/var/log/auth.log在其中说:“身份验证被拒绝:所有权错误或目录/ home / chuck的模式”。(这是为了确保它不使用除您以外一直在搞乱的authorized_keys文件!)


虽然这当然有帮助,但我认为这是xeyes答案的补充
gertvdijk 2013年

1
哦,天哪,非常感谢!我的眼睛发亮,因为我在Google上进行的所有搜索。终于成功了!非常感谢。
GTRONICK

伙计,谢谢!我花了几个小时寻找解决方案...这解决了我所有的问题。
Afaria

对。就是这样。很高兴我决定读下一个答案
Katushai '16

还要在/ etc / passwd中检查用户的主目录是什么。我奇怪的问题是它不是标准的
-drodsou

5

解决此问题的方法有多种:您可以配置sshd(服务器端)或ssh(客户端)不使用密码身份验证。在服务器上禁用密码身份验证可以提高服务器的安全性,但是如果您松开密钥,将会遇到麻烦。

ssh使用pubkey身份验证进行(客户端),请在ssh命令中添加一些选项:

ssh -o PubkeyAuthentication=yes -o PasswordAuthentication=no -X git@server

如果可行,您可以PasswordAuthentication=no/etc/ssh/ssh_config系统范围或~/.ssh/config特定于用户的ssh客户端配置文件中永久设置该选项(有关详细信息,请参阅man ssh_config)。


1
默认情况下/etc/ssh/ssh_config,Debian / Ubuntu系统上的所有SSH客户端配置()都已经优先使用 PubkeyAuthentication,请先尝试使用它,ssh以详细模式调用时会看到。
gertvdijk

3

您是否在本地计算机上使用〜/ .ssh / config?当我在配置文件中使用IdentityFile指令并指向公钥时,我就遇到了这个问题。例如:

Host Cloud
    Hostname cloud.theclouds.com
    User git
    IdentityFile ~/.ssh/config/mykey # This is correct

    # IdentityFile ~/.ssh/config/mykey.pub # This is incorrect


1

要检查的另一件事是您的公共密钥中是否还有多余的回车符。我按照上面的建议查看了/var/log/auth.log并在读取密钥时看到错误。密钥大约是两行而不是四行。钥匙中嵌入了额外的回车符。

使用vi编辑器时,请使用shift-j合并各行并清除键字符串中的多余空格。


1
我对权限进行了三重检查sshd_config。我的头撞在墙上半个小时。这是我的错!不知何故,我已经习惯了用额外的换行符结束我手工编辑的所有文件。即使有一个键和回车结束,这足以搞乱授权。
jrhorn424 2013年

确保您也具有----- END RSA PRIVATE KEY -----位。
tobych

1

如果您有多个私钥,请使用ssh connection命令上的-v开关来检查是否需要使用其他主键来尝试连接。如果不是,请通过以下命令告诉ssh客户端使用它们:

ssh-add path/to/private/key

1

您还可以将密钥添加到SSH代理:

u@pc:~$ ssh-agent bash
u@pc:~$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/u/.ssh/id_rsa: # ENTER YOUR PASSWORD
Identity added: /home/u/.ssh/id_rsa (/home/u/.ssh/id_rsa)

0

也可能是您在打电话

sudo git clone gituser@domain:repo.git

在root用户SSH密钥还没有被添加到authorized_keysgituser


0

在运行Ubuntu 18.04.02 LTS的计算机上,将权限设置~/.ssh为600 的建议对我不起作用。我必须将权限设置为700,然后一切正常。


0

我的.ssh /目录和authorized_keys文件权限正确,但是由于另一个自发的问题而遇到此“提示输入密码”问题。

我曾使用基于鼠标的突出显示和复制/粘贴功能将信息从本地id_rsa.pub复制到服务器上的authorized_keys文件中。这样可以成功地将数据复制为一行,但是在可见行的末尾有一些多余的空间,这些空间在使用vi编辑文件时很难看到。一旦删除了这些多余的空间,我就可以使用ssh了。


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
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.