我将公共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。如果没有密码,为什么不登录?
答案 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)
答案 4 :(得分:9)
答案 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_rsa
和id_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 ~/.ssh
和chmod 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)
自从我以前遇到过同样的问题,但是今天我不得不设置一台新服务器。我这次可以学到什么...
允许不使用密码进行身份验证的基本过程如下:
在服务器上,验证您的主文件夹是否具有.ssh
文件夹。如果不存在,则可以使用mkdir
命令手动创建它,然后使用chmod
分配正确的权限,否则可以使用相同的实用程序ssh-keygen
来创建私钥/公钥,但在服务器上为您的用户创建。此过程将创建所需的.ssh
文件夹。
在本地计算机上,您还需要使用ssh-keygen
实用程序创建私钥/公钥。
您需要将公共密钥移动到文件.ssh/authorized_keys
到服务器。为此,可以使用ssh-copy-id
实用程序,也可以使用cat
和scp
命令手动进行。
在最佳情况下,这将允许无需密码即可连接到服务器。
好的,现在我今天发现的问题是:首先,有几种密钥生成算法:rsa
,dsa
,ecdsa
和ed25519
,并且有许多发行版本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