在将SSH公钥复制到authorized_keys后,服务器一直要求输入密码

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

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

我做错了什么?

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

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

这里有其他要检查的事情。

  • 确保/home/git/.ssh/authorized_keysgit
  • 确保/home/git/.ssh/authorized_keys的模式为600( -rw------- )。

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

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

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

有不同的方法可以解决此问题:您可以配置sshd (服务器端)或ssh (客户端)不使用密码身份validation。 在服务器上禁用密码身份validation可以使您的服务器更安全,但如果丢失密钥,则会遇到麻烦。

要使用pubkey身份validation创建ssh (客户端),请在ssh命令中添加一些选项:

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

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

你在本地机器上使用〜/ .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 

如果您的主文件夹已加密,则在登录前您的authorized_keys文件无法读取。 你必须把它移到你家外面。

以下是解释和解决方法: https : //help.ubuntu.com/community/SSH/OpenSSH/Keys#Troubleshooting

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

使用vi编辑器时,使用shift-j连接行并删除键字符串中的额外空格。

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

 ssh-add path/to/private/key 

您还可以将密钥添加到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) 

也可能是你在打电话

sudo git clone gituser@domain:repo.git

root用户ssh密钥尚未添加到gituserauthorized_keys