在将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_keys
归git
。 - 确保
/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密钥尚未添加到gituser
的authorized_keys
中