我有一个在云中运行的Ubuntu服务器。我创建了一个用户(git
)。在文件夹中/home/git
,我创建了.ssh/
目录和authorized_keys
文件。
但是,当我将SSH公钥放入authorized_keys
文件中时,服务器继续询问我密码。
我做错了什么?
我有一个在云中运行的Ubuntu服务器。我创建了一个用户(git
)。在文件夹中/home/git
,我创建了.ssh/
目录和authorized_keys
文件。
但是,当我将SSH公钥放入authorized_keys
文件中时,服务器继续询问我密码。
我做错了什么?
Answers:
在服务器端,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
文件怎么办?有没有办法打开它?
sudo service ssh restart
还要确保您的用户主目录(在您的情况下为/ home / git)只能由您写。我曾经遇到过这个问题,因为我的主目录是可写的。/var/log/auth.log在其中说:“身份验证被拒绝:所有权错误或目录/ home / chuck的模式”。(这是为了确保它不使用除您以外一直在搞乱的authorized_keys文件!)
解决此问题的方法有多种:您可以配置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
)。
/etc/ssh/ssh_config
,Debian / Ubuntu系统上的所有SSH客户端配置()都已经优先使用 PubkeyAuthentication
,请先尝试使用它,ssh
以详细模式调用时会看到。
如果您的主文件夹是加密的,则authorized_keys
在登录之前无法读取您的文件。您必须将其移出家门。
此处说明了操作方法:https://help.ubuntu.com/community/SSH/OpenSSH/Keys#故障排除
要检查的另一件事是您的公共密钥中是否还有多余的回车符。我按照上面的建议查看了/var/log/auth.log并在读取密钥时看到错误。密钥大约是两行而不是四行。钥匙中嵌入了额外的回车符。
使用vi编辑器时,请使用shift-j合并各行并清除键字符串中的多余空格。
sshd_config
。我的头撞在墙上半个小时。这是我的错!不知何故,我已经习惯了用额外的换行符结束我手工编辑的所有文件。即使有一个键和回车结束,这足以搞乱授权。
因此对我来说,发生了什么事,我有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