将公钥添加到〜/ .ssh / authorized_keys不会自动登录

时间:2011-06-16 18:50:50

标签: ssh public-key authorized-keys

我将公共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>

然后它在上面的日志之后要求passphase。如果没有密码,为什么不登录?

30 个答案:

答案 0 :(得分:985)

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

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

有关详细信息,请参阅this page

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

chmod go-w ~

答案 1 :(得分:142)

SELinux也会导致authorized_keys无法正常工作。特别是对于CentOS 6和7中的root。不需要禁用它。验证您的权限是否正确后,您可以解决此问题:

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

答案 2 :(得分:93)

设置 ssh authorized_keys 似乎很简单,但隐藏了一些我想要的陷阱

- 服务器 -

/ etc / ssh / sshd_config 中设置passwordAuthentication yes让服务器临时接受密码验证

- 客户 -

  

cygwin视为linux仿真并安装&amp;运行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 sting

5 在目标计算机中设置权限

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

同时关闭pass auth

passwordAuthentication no

关闭所有ssh root / admin /....@ your_domain尝试的大门

6 确保所有非root主目录的所有权和组所有权是合适的。

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

===============================================

7。考虑优秀的http://www.fail2ban.org

8。额外 ssh TUNNEL访问MySQL(bind = 127.0.0.1)服务器

答案 3 :(得分:34)

还要确保您的主目录不被其他人写入

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

来自here

的答案被盗

答案 4 :(得分:9)

绝望的人也可能会确保他们在authorized_keys文件中没有额外的换行符,因为从混淆的终端中复制了id_rsa.pub文本。

答案 5 :(得分:7)

请注意,即使所有权限都正常,SELinux也可以触发此错误。禁用它为我做了伎俩(插入关于禁用它的常见免责声明)。

答案 6 :(得分:7)

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

您的UPDATE跟踪与受密码保护的私钥一致。请参阅ssh-agent或ssh-keygen -p。

答案 7 :(得分:5)

用户是您的用户名

String pathGet = "/path/to/file/myFile.jpg"; 
Drawable d = Drawable.createFromPath(pathGet);

答案 8 :(得分:5)

最终为我做的诀窍是确保所有者/群组不是root用户而是用户:

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 

答案 9 :(得分:4)

写命令:

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

答案 10 :(得分:3)

尝试“ssh-add”,这对我有用。

答案 11 :(得分:3)

要记住的另一个提示。由于v7.0 OpenSSH disables DSS / DSA ssh密钥默认由于其继承的弱点。因此,如果您有OpenSSH v7.0 +,请确保您的密钥不是ssh-dss

  

如果您遇到DSA密钥,可以在本地重新启用支持   使用以下行格式更新sshd_config~/.ssh/config个文件:PubkeyAcceptedKeyTypes=+ssh-dss

答案 12 :(得分:3)

在我的情况下,我需要将authorized_keys文件放在.openssh中。

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

答案 13 :(得分:2)

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

答案 14 :(得分:2)

您需要注意的另一个问题。如果生成的文件不是默认文件 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

答案 15 :(得分:1)

我从上面发出了sudo chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys以及chmod go-w $HOME $HOME/.ssh,它解决了我在CentOS7上修复了问题,我试图让samba共享工作时搞砸了权限。感谢

答案 16 :(得分:1)

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

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

答案 17 :(得分:1)

这解决了我的问题

  
    

ssh-agent bash

         

SSH-添加

  

答案 18 :(得分:1)

确保您已将整个公钥复制到authorized_keys; ssh rsa前缀是密钥工作所必需的。

答案 19 :(得分:1)

只需查看服务器上的 /var/log/auth.log 即可。在客户端使用 -vv 设置额外的详细程度将无济于事,因为服务器不太可能向可能的攻击者提供过多信息。

答案 20 :(得分:1)

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

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

答案 21 :(得分:0)

自从我以前遇到过同样的问题,但是今天我不得不设置一台新服务器。我这次可以学到什么...

允许不使用密码进行身份验证的基本过程如下:

  1. 在服务器上,验证您的主文件夹是否具有.ssh文件夹。如果不存在,则可以使用mkdir命令手动创建它,然后使用chmod分配正确的权限,否则可以使用相同的实用程序ssh-keygen来创建私钥/公钥,但在服务器上为您的用户创建。此过程将创建所需的.ssh文件夹。

  2. 在本地计算机上,您还需要使用ssh-keygen实用程序创建私钥/公钥。

  3. 您需要将公共密钥移动到文件.ssh/authorized_keys到服务器。为此,可以使用ssh-copy-id实用程序,也可以使用catscp命令手动进行。

  4. 在最佳情况下,这将允许无需密码即可连接到服务器。

好的,现在我今天发现的问题是:首先,有几种密钥生成算法:rsadsaecdsaed25519,并且有许多发行版本OpenSSH(本地计算机上可以有一个版本,服务器上可以有一个旧版本):

提示::在连接到服务器时,使用ssh -v有助于查看其他信息。

OpenSSH_8.2p1 Ubuntu-4, OpenSSL 1.1.1f 31 Mar 2020

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3

我今天遇到的错误是,我试图将密钥与服务器上已安装的OpenSSH版本不支持的“较新的”生成算法一起使用。检查支持的算法后,发现的另一个错误是服务器拒绝了我的算法:

debug1: Skipping ssh-dss key /home/user/.ssh/id_dsa - not in PubkeyAcceptedKeyTypes

此后,我必须更改密钥的算法,然后我才能成功连接服务器。

OpenSSH发行说明:Link

答案 22 :(得分:0)

我用这种方式。

cat ~/.ssh/id_rsa.pub| ssh user@remote-system 'umask 077; cat >>~/.ssh/authorized_keys'

答案 23 :(得分:0)

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

答案 24 :(得分:0)

在服务器上的/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

答案 25 :(得分:0)

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

在我的情况下,事实证明/root目录本身(例如/root/.ssh)具有错误的权限。我需要:

chown root.root /root
chmod 700 /root

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

答案 26 :(得分:0)

我的主目录位于非标准位置,在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重启

答案 27 :(得分:0)

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

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

答案 28 :(得分:0)

就我而言,因为用户的组未设置在配置文件/ etc / ssh / sshd_config的AllowGroups中。添加后一切正常。

答案 29 :(得分:0)

注意,请确保sshd config有 - ;

PermitRootLogin without-password

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

注销并再次尝试登录!

默认我相信是 - ;

PermitRootLogin no