向〜/ .ssh / authorized_keys添加公钥不会自动登录我

问题描述 投票:446回答:28

我将公共SSH密钥添加到authorized_keys文件中。 ssh localhost应该在不要求密码的情况下登录我。

我这样做并尝试输入ssh localhost,但仍然要求我输入密码。为了使它正常工作,我还需要进行其他设置吗?

我已按照说明更改权限:

下面是执行ssh -v localhost的结果。

debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

然后,在上述日志之后要求通过阶段。为什么没有密码却无法登录?

ssh public-key authorized-keys
28个回答
1097
投票

您需要验证authorized_keys文件及其所在的文件夹/父文件夹的权限。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

有关更多信息,请参见this page

您可能还需要更改/验证主目录的权限,以删除该组和其他组的写访问权限。

chmod go-w ~

155
投票

SELinux也可能导致authorized_keys不起作用。特别是对于CentOS 6和7中的root用户。确认权限正确后,您可以像这样解决此问题:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh

104
投票

设置sshauthorized_keys似乎很简单,但隐藏了一些我想弄清楚的陷阱

-服务器-

/ etc / ssh / sshd_config中设置passwordAuthentication yes,以使服务器临时接受密码身份验证

-客户-

考虑cygwin作为Linux仿真并安装并运行openssh

1。生成专用和公用密钥(客户端)# ssh-keygen

这里仅按ENTER,您将得到DEFAULT〜/ .ssh /中有2个文件“ id_rsa”和“ id_rsa.pub”,但是如果您提供name_for_the_key,则生成的文件将保存在您的pwd]中>

2。

your_key.pub放置到目标计算机ssh-copy-id user_name@host_name

如果您没有创建默认密钥,这是出错的第一步...您应该使用

ssh-copy-id -i path/to/key_name.pub user_name@host_name

3。

日志记录ssh user_name@host_name仅对默认的id_rsa有效,因此这是第二个陷阱,您需要ssh -i path/to/key_name user@host

(使用ssh -v ...

选项查看正在发生的事情)

如果服务器仍然要求输入密码

,则您输入了smth。创建密钥后,输入输入密码:(这很正常)

如果ssh没有监听默认端口22必须使用ssh -p port_nr

-服务器-----

4。

修改/ etc / ssh / sshd_config具有
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(如果情况不予提供)

这告诉ssh接受authorized_keys并在用户主目录中查找以.ssh / authorized_keys文件编写的key_name字符串

<< [5

在目标计算机中设置权限chmod 755 ~/.ssh chmod 600 ~/.ssh/authorized_keys
也关闭通行验证

passwordAuthentication no

关闭所有ssh root / admin /....@您的域尝试的门

6

确保所有非根主目录的所有权和组所有权都是适当的。
chown -R ~ usernamehere chgrp -R ~/.ssh/ user
==============================================] >

7。

考虑出色的http://www.fail2ban.org

8。

额外ssh TUNNEL访问MySQL(绑定= 127.0.0.1)服务器
还请确保您的主目录不能被其他人写入

chmod g-w,o-w /home/USERNAME

here的答案被盗    

绝望的人还可能由于从混乱的终端中复制了id_rsa.pub文本,因此也确保他们在authorized_keys文件中没有多余的换行符。

请注意,即使所有权限似乎都不错,SELinux也会触发此错误。禁用它对我来说很成功(插入有关禁用它的常规免责声明)。

用户是您的用户名

mkdir -p /home/user/.ssh ssh-keygen -t rsa touch /home/user/.ssh/authorized_keys touch /home/user/.ssh/known_hosts chown -R user:user /home/user/.ssh chmod 700 /home/user/.ssh chmod 600 /home/user/.ssh/id* chmod 644 /home/user/.ssh/id*.pub chmod 644 /home/user/.ssh/authorized_keys chmod 644 /home/user/.ssh/known_hosts

。ssh / authorized_keys]中列出公共密钥是必需的,但不足以使sshd(服务器)接受它。如果您的私钥受密码保护,则每次都需要为ssh(客户端)提供密码。或者,您可以使用ssh-agent

或等效的GNOME。
您的

已更新

跟踪与密码短语保护的私钥一致。请参阅ssh-agent,或使用ssh-keygen -p
写命令:

chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

完成此操作后,请确保您的目录是这样的:

drwx------ 2 lab lab 4.0K Mar 13 08:33 . drwx------ 8 lab lab 4.0K Mar 13 08:07 .. -rw------- 1 lab lab 436 Mar 13 08:33 authorized_keys -rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa -rw-r--r-- 1 lab lab 413 Mar 13 07:35 id_rsa.pub

最终对我有用的事情是确保

owner / group不是超级用户,而是用户:

chown -R ~/.ssh/ user chgrp -R ~/.ssh/ user
尝试对我有用的“ ssh-add”。

另一个要记住的技巧。从v7.0开始,OpenSSHdisablesDSS / DSA ssh密钥由于其继承弱点而默认情况下。因此,如果您具有OpenSSH v7.0 +,请确保您的密钥不是ssh-dss

如果您卡在DSA密钥上,则可以通过以下方式在本地重新启用支持: 用如下行更新sshd_config~/.ssh/config文件:PubkeyAcceptedKeyTypes=+ssh-dss

就我而言,我需要将authorized_keys文件放入.openssh

此位置在选项/etc/ssh/sshd_config下的AuthorizedKeysFile %h/.ssh/authorized_keys中指定。

请确保目标用户已设置密码。运行passwd username设置一个。即使禁用了SSH密码登录,这对我也是必需的。

这解决了我的问题

ssh-agent bash

ssh-add

另一个必须注意的问题。如果生成的文件不是默认文件id_rsaid_rsa.pub

您必须创建.ssh / config文件并手动定义要与该连接一起使用的id文件。

示例在这里:

host remote_host_name hostname 172.xx.xx.xx user my_user IdentityFile /home/my_user/.ssh/my_user_custom.pub

我从上面发出了sudo chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keyschmod go-w $HOME $HOME/.ssh,它解决了我在CentOS7机器上遇到的问题,当我试图使samba共享正常工作时,我弄乱了权限。谢谢

似乎是权限问题。如果某些文件/目录的权限设置不正确,通常会发生这种情况。在大多数情况下,它们是~/.ssh~/.ssh/*。就我而言,它们是/home/xxx

您可以通过修改/etc/ssh/sshd_config(搜索LogLevel,将其设置为DEBUG)来更改sshd的日志级别,然后检查/var/log/auth.log中的输出以查看发生了什么。

我的问题是修改的AuthorizedKeysFile,当时尚未运行用于填充/ etc / ssh / authorized_keys的自动化程序。

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config #AuthorizedKeysFile .ssh/authorized_keys AuthorizedKeysFile /etc/ssh/authorized_keys/%u

只需查看

服务器上的/ var / log / auth.log

。在客户端使用-vv
设置其他详细信息将无济于事,因为服务器不太可能为可能的攻击者提供太多信息。
确保您已将整个公钥复制到authorized_keys;要使密钥起作用,ssh rsa前缀是必需的。

您需要验证文件的属性。分配所需的属性使用:

$ chmod 600 ~/.ssh/sshKey $ chmod 644 ~/.ssh/sshKey.pub

在服务器上的/var/log/auth.log中查找sshd身份验证错误。

如果其他所有方法均失败,则以调试模式运行sshd服务器:

sudo /usr/sbin/sshd -ddd -p 2200

然后从客户端连接:

ssh user@host -p 2200

就我而言,我在最后找到了错误部分:

debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth] ==> debug2: userauth_pubkey: disabled because of invalid user [preauth] debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth] debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth] debug3: send packet: type 51 [preauth] debug3: receive packet: type 50 [preauth]

通过此信息,我意识到我的sshd_config将登录名限制为ssh组的成员。以下命令修复了此权限错误:

sudo usermod -a -G ssh NEW_USER

注意,请确保您的sshd配置具有-;

PermitRootLogin without-password

如上设置,然后重新启动sshd(/etc/init.d/sshd restart)

注销并再次尝试登录!

我相信默认是-;

PermitRootLogin no

在我的情况下,这是因为未在配置文件/ etc / ssh / sshd_config的AllowGroups中设置用户组。添加后,一切正常。

我的主目录位于非标准位置,并且在sshd日志中有以下行:

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied

即使所有权限都很好(请参阅其他答案)。

我在这里找到了解决方案:http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191

在我特定的情况下:

  • /etc/selinux/targeted/contexts/files/file_contexts.homedirs中添加了新行:

    • 这是常规主目录的原始行:

      /home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

    • 这是我的新行:

      /data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

    • 接着是restorecon -r /data/sshd重新启动
  • 我有这个问题,其他答案都没有解决,尽管其他答案当然是正确的。

    就我而言,原来/root目录本身(而不是/root/.ssh)具有错误的权限。我需要:

    chown root.root /root chmod 700 /root

    当然,这些权限应该是类似的东西(也许是chmod 770)。但是,即使sshd/root/.ssh都具有正确的权限和所有者,它也特别阻止了/root/.ssh/authorized_keys的工作。

当我将登录用户的组添加到另一个用户时,我遇到了这个问题。假设有一个名为userA的ssh登录用户和一个非ssh登录用户userB。 userA也具有组userA。我将userB修改为也有组userA。导致上述行为,因此userA在没有提示的情况下无法登录。从用户B删除组userA后,再次进行无提示登录。

36
投票
还请确保您的主目录不能被其他人写入

12
投票
绝望的人还可能由于从混乱的终端中复制了id_rsa.pub文本,因此也确保他们在authorized_keys文件中没有多余的换行符。

7
投票
请注意,即使所有权限似乎都不错,SELinux也会触发此错误。禁用它对我来说很成功(插入有关禁用它的常规免责声明)。

7
投票
用户是您的用户名

7
投票

。ssh / authorized_keys]中列出公共密钥是必需的,但不足以使sshd(服务器)接受它。如果您的私钥受密码保护,则每次都需要为ssh(客户端)提供密码。或者,您可以使用ssh-agent


5
投票
写命令:

chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys


5
投票
最终对我有用的事情是确保

owner / group不是超级用户,而是用户:


3
投票
尝试对我有用的“ ssh-add”。

3
投票
另一个要记住的技巧。从v7.0开始,OpenSSHdisablesDSS / DSA ssh密钥由于其继承弱点而默认情况下。因此,如果您具有OpenSSH v7.0 +,请确保您的密钥不是ssh-dss

如果您卡在DSA密钥上,则可以通过以下方式在本地重新启用支持: 用如下行更新sshd_config~/.ssh/config文件:PubkeyAcceptedKeyTypes=+ssh-dss

3
投票
就我而言,我需要将authorized_keys文件放入.openssh

此位置在选项/etc/ssh/sshd_config下的AuthorizedKeysFile %h/.ssh/authorized_keys中指定。


2
投票
请确保目标用户已设置密码。运行passwd username设置一个。即使禁用了SSH密码登录,这对我也是必需的。

2
投票
这解决了我的问题

ssh-agent bash

2
投票
另一个必须注意的问题。如果生成的文件不是默认文件id_rsaid_rsa.pub

您必须创建.ssh / config文件并手动定义要与该连接一起使用的id文件。


1
投票
我从上面发出了sudo chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keyschmod go-w $HOME $HOME/.ssh,它解决了我在CentOS7机器上遇到的问题,当我试图使samba共享正常工作时,我弄乱了权限。谢谢

1
投票
似乎是权限问题。如果某些文件/目录的权限设置不正确,通常会发生这种情况。在大多数情况下,它们是~/.ssh~/.ssh/*。就我而言,它们是/home/xxx

您可以通过修改/etc/ssh/sshd_config(搜索LogLevel,将其设置为DEBUG)来更改sshd的日志级别,然后检查/var/log/auth.log中的输出以查看发生了什么。


1
投票
我的问题是修改的AuthorizedKeysFile,当时尚未运行用于填充/ etc / ssh / authorized_keys的自动化程序。

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config #AuthorizedKeysFile .ssh/authorized_keys AuthorizedKeysFile /etc/ssh/authorized_keys/%u


1
投票
只需查看

服务器上的/ var / log / auth.log


1
投票
确保您已将整个公钥复制到authorized_keys;要使密钥起作用,ssh rsa前缀是必需的。

1
投票
您需要验证文件的属性。分配所需的属性使用:

$ chmod 600 ~/.ssh/sshKey $ chmod 644 ~/.ssh/sshKey.pub


1
投票
在服务器上的/var/log/auth.log中查找sshd身份验证错误。

如果其他所有方法均失败,则以调试模式运行sshd服务器:


0
投票
注意,请确保您的sshd配置具有-;

PermitRootLogin without-password


0
投票
在我的情况下,这是因为未在配置文件/ etc / ssh / sshd_config的AllowGroups中设置用户组。添加后,一切正常。

0
投票
我的主目录位于非标准位置,并且在sshd日志中有以下行:

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied


0
投票
我有这个问题,其他答案都没有解决,尽管其他答案当然是正确的。

就我而言,原来/root目录本身(而不是/root/.ssh)具有错误的权限。我需要:


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.