我将公共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>
然后,在上述日志之后要求通过阶段。为什么没有密码却无法登录?
您需要验证authorized_keys
文件及其所在的文件夹/父文件夹的权限。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
有关更多信息,请参见this page。
您可能还需要更改/验证主目录的权限,以删除该组和其他组的写访问权限。
chmod go-w ~
SELinux也可能导致authorized_keys不起作用。特别是对于CentOS 6和7中的root用户。确认权限正确后,您可以像这样解决此问题:
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh
设置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
==============================================] >考虑出色的http://www.fail2ban.org7。
8。
额外ssh TUNNEL访问MySQL(绑定= 127.0.0.1)服务器chmod g-w,o-w /home/USERNAME
here的答案被盗
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
您的在或等效的GNOME。。ssh / authorized_keys]中列出公共密钥是必需的,但不足以使sshd(服务器)接受它。如果您的私钥受密码保护,则每次都需要为ssh(客户端)提供密码。或者,您可以使用ssh-agent
已更新
跟踪与密码短语保护的私钥一致。请参阅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 bashssh-add
另一个必须注意的问题。如果生成的文件不是默认文件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
我从上面发出了sudo chmod 700 ~/.ssh
和chmod 600 ~/.ssh/authorized_keys
和chmod 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
设置其他详细信息将无济于事,因为服务器不太可能为可能的攻击者提供太多信息。只需查看。在客户端使用-vv服务器上的/ var / log / auth.log
确保您已将整个公钥复制到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后,再次进行无提示登录。
。ssh / authorized_keys]中列出公共密钥是必需的,但不足以使sshd(服务器)接受它。如果您的私钥受密码保护,则每次都需要为ssh(客户端)提供密码。或者,您可以使用ssh-agent
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
owner / group不是超级用户,而是用户:
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
id_rsa
和id_rsa.pub
您必须创建.ssh / config文件并手动定义要与该连接一起使用的id文件。
sudo chmod 700 ~/.ssh
和chmod 600 ~/.ssh/authorized_keys
和chmod go-w $HOME $HOME/.ssh
,它解决了我在CentOS7机器上遇到的问题,当我试图使samba共享正常工作时,我弄乱了权限。谢谢 ~/.ssh
和~/.ssh/*
。就我而言,它们是/home/xxx
。您可以通过修改/etc/ssh/sshd_config
(搜索LogLevel
,将其设置为DEBUG
)来更改sshd的日志级别,然后检查/var/log/auth.log
中的输出以查看发生了什么。
$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
服务器上的/ var / log / auth.log
authorized_keys
;要使密钥起作用,ssh rsa
前缀是必需的。 $ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub
/var/log/auth.log
中查找sshd
身份验证错误。如果其他所有方法均失败,则以调试模式运行sshd
服务器:
PermitRootLogin without-password
sshd
日志中有以下行:Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied
就我而言,原来/root
目录本身(而不是/root/.ssh
)具有错误的权限。我需要: