无密码ssh无法正常工作


35

我试图建立一个无密码的SSH的B / W ABBA为好。ssh-keygen -trsa在两台机器上使用生成公钥和私钥。使用的ssh-copy-id实用程序将公共密钥从复制AB以及BA

该密码的ssh从工作AB,但是notBA。我检查了〜/ ssh /文件夹的权限,这似乎很正常。

A's .ssh 文件夹权限:

-rw-------  1 root root 13530 2011-07-26 23:00 known_hosts
-rw-------  1 root root   403 2011-07-27 00:35 id_rsa.pub
-rw-------  1 root root  1675 2011-07-27 00:35 id_rsa
-rw-------  1 root root   799 2011-07-27 00:37 authorized_keys
drwxrwx--- 70 root root  4096 2011-07-27 00:37 ..
drwx------  2 root root  4096 2011-07-27 00:38 .

B's .ssh 文件夹权限:

-rw------- 1 root root  884 2011-07-07 13:15 known_hosts
-rw-r--r-- 1 root root  396 2011-07-27 00:15 id_rsa.pub
-rw------- 1 root root 1675 2011-07-27 00:15 id_rsa
-rw------- 1 root root 2545 2011-07-27 00:36 authorized_keys
drwxr-xr-x 8 root root 4096 2011-07-06 19:44 ..
drwx------ 2 root root 4096 2011-07-27 00:15 .

A是一个ubuntu 10.04(OpenSSH_5.3p1 Debian-3ubuntu4,OpenSSL 0.9.8k 2009年3月25日)B是一个debian机器(OpenSSH_5.1p1 Debian-5,OpenSSL 0.9.8g 2007年10月19日)

来自A

#ssh B

工作正常。

来自B

#ssh -vvv A 
...
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /root/.ssh/identity ((nil))
debug2: key: /root/.ssh/id_rsa (0x7f1581f23a50)
debug2: key: /root/.ssh/id_dsa ((nil))
debug3: Wrote 64 bytes for a total of 1127
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,gssapi,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug3: no such identity: /root/.ssh/identity
debug1: Offering public key: /root/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 368 bytes for a total of 1495
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
root@192.168.122.1's password: 

本质上,这意味着它没有使用file进行身份验证/root/id_rsa。我ssh-add也在两台机器上都运行了命令。

/etc/ssh/sshd_config文件的身份验证部分是

# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files

我的想法不多了。任何帮助,将不胜感激。


A上的PermitRootLoginin 的设置是什么/etc/ssh/sshd_config
taneli 2011年

@taneli:,yes否则不会提示用户输入密码。
Lekensteyn

就我而言,我必须在ubuntu 12.04上的文件“ / etc / ssh / sshd_config”中取消注释“ IgnoreUserKnownHosts yes”
Martin Magakian 2013年

Answers:


24

只需确保您已遵循以下过程:

在机器A上

打开终端并输入以下命令:

root@aneesh-pc:~# id

只是为了确保我们是根。

如果上面的命令输出类似下面的内容,我们是root用户,否则使用su命令切换到root用户

uid=0(root) gid=0(root) groups=0(root)

1)创建密钥。

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
49:7d:30:7d:67:db:58:51:42:75:78:9c:06:e1:0c:8d root@aneesh-pc
The key's randomart image is:
+--[ RSA 2048]----+
|          ooo+==B|
|         . E=.o+B|
|        . . .+.*o|
|       . . .  ...|
|        S        |
|                 |
|                 |
|                 |
|                 |
+-----------------+

我没有使用过任何密码短语。如果您需要一个,可以使用它。

2)将公钥复制到机器B的.ssh/authorized_keys文件中

root@aneesh-pc:~# ssh-copy-id -i /root/.ssh/id_rsa.pub root@mylap
root@mylap's password: 

现在,尝试使用登录到计算机ssh 'root@mylap',然后签入:

~/.ssh/authorized_keys

以确保我们没有添加您没有期望的额外键。

将mylap替换为您要登录的计算机(即计算机B)的主机名或IP

3)不用密码登录B

root@aneesh-pc:~# ssh root@mylap
Warning: Permanently added 'mylap,192.168.1.200' (RSA) to the list of known hosts.
Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-8-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Wed Jul 27 15:23:58 2011 from streaming-desktop.local
aneesh@mylap:~$

在机器B上

4)创建密钥以登录回计算机A

root@mylap:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
35:9f:e7:81:ed:02:f9:fd:ad:ef:08:c6:4e:19:76:b1 root@streaming-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|          o   .  |
|         . + + o |
|        S o * E  |
|           = O . |
|            O +  |
|           + o o.|
|            . o+=|
+-----------------+

5)将公钥复制到机器A的.ssh/authorized_keys文件中

root@mylap:~# ssh-copy-id -i /root/.ssh/id_rsa.pub root@aneesh-pc
Warning: Permanently added 'aneesh-pc,192.168.1.20' (RSA) to the list of known hosts.
root@aneesh-pc's password: 

现在,尝试使用登录到计算机ssh 'root@aneesh-pc',然后签入:

.ssh/authorized_keys

以确保我们没有添加您没有期望的额外键。

6)登录无密码的A

ssh root@aneesh-pc
Warning: Permanently added 'aneesh-pc,192.168.1.20' (RSA) to the list of known hosts.
Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-8-generic x86_64)

 * Documentation:  https://help.ubuntu.com/


Last login: Tue Jul 26 18:52:55 2011 from 192.168.1.116

如果您能够完成这些步骤,则操作完成。现在,您有两台启用了ssh-key(公共密钥)登录的机器。


按照指定的步骤执行了所有6个步骤,并验证了与步骤5相关的所有内容,但是以某种方式第6步不起作用
Cuurious 2011年

您能否提供以下命令的输出:'ssh -v root @ aneesh-pc'。用您的用户名和主机名替换。
aneeshep

15
发现罪魁祸首/root(770) 的权限drwxrwx--- 70 root root 4096 2011-07-27 00:37 .. 太开放。更改了权限 drwxr-xr-x,现在可以使用了。无法想象父目录的权限会影响的事实ssh
好奇的

1
@Cuurious很好,我的主目录也已770设置,更改为a,750并且一切正常:)我似乎总是忘记linux prems可以像这样反向工作。
complistic

1
在第3步失败。ssh-copy-id在输入密码后运行,但是我仍然无法登录而不提示输入密码,我的authorized_keys文件包含我的.pub文本,并且我在登录时提供了密钥。徒劳无功。所有目录上的权限均正确。
马特·克拉克

44

设置密码的SSH,我还在问我的用户密码。看着/var/log/auth.log远程机器上指出的问题:

sshd[4215]: Authentication refused: bad ownership or modes for directory /home/<user>

因此,请确保正确设置:

chmod o-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

虽然禁止其他用户覆盖您的.ssh文件夹很明显,但是对您的主文件夹具有相同的要求比较棘手。

另外,请检查/etc/ssh/ssd_config并确保未禁用RSAAuthenticationPubkeyAuthentication选项。默认是yes这样,所以应该不会有问题。


还请确保上面列出的那些文件夹归正确的用户所有
GoalBased 2013年

通过解开一个错误创建的realtek驱动程序存档,我陷入了这种情况。它更改了我将其解压缩到的目录上的所有者。
Paul McMillan

2
您的主文件夹无法写,因为如果可以写,那么我可以将您的文件夹重命名~/.ssh为其他名称,然后使用自己的密钥在其中创建一个新文件夹。
凯文·潘科

2
太棒了!没想过要查看主机上的日志。谢谢!
user3099609

14

可能只是更高级别的权限问题。您需要删除组和其他用户对主目录和.ssh目录的写许可权。 要修复这些权限,请运行chmod 755 ~ ~/.sshchmod go-w ~ ~/.ssh

如果仍然有问题,请在日志中发出以下grep:

sudo egrep -i 'ssh.*LOCAL_USER_NAME' /var/log/secure

(替换LOCAL_USER_NAME为您的本地用户名...)

假设sshd身份验证信息已记录到安全日志中,这应该可以告诉您有关您的问题的更多信息,默认情况下应为安全日志。如果看到如下错误:

DATE HOSTNAME sshd [1317]:身份验证被拒绝:错误的所有权或目录/ path / to / some / directory的模式

这是上面描述的问题,您需要找到有问题的目录,并从组和其他目录中删除写许可权。

由于您需要限制对主目录的写权限(即使您的.ssh和后续目录的权限已受到限制)的原因,这将允许其他用户重命名.ssh目录并创建一个新目录-尽管(由于权限错误)将无法使用,大多数用户的解决方法可能是更改权限而不是检查目录的内容...

TLDNR:允许组和/或其他对您的主目录的写访问将使ssh强制密码登录。


2

您是否在每台计算机上使用root帐户?通常在Ubuntu上,您将使用用户帐户,并根据需要为其授予sudo特权。

如果您使用非root用户sudo chown $USER -R ~/.ssh可以解决您的问题

其他要检查的内容:

仔细检查B id_rsa.pub是否在A中authorized_keys

检查A的/etc/ssh/sshd_config包含

PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes

是的,我已经在Ubuntu计算机中启用了root帐户,因此在两个系统中都以root用户身份运行
Cuurious 11'27

是的,我想通了,添加了一些其他您可能忽略了的建议。该输出实际上是没有用的,尽管不是,关于为什么不接受rsa没什么。
Smithamax,2011年

1
你是真的,为什么我不接受rsa密钥是必不可少的原因:)。sshd_config包含上述元素,我已经编辑了问题以合并/etc/ssh/sshd_config文件内容的内容
Cuurious 2011年

-3

在/ etc / ssh / sshd_config中对目标进行更改

许可RootLogin no

PermitRootLogin是

然后杀死-HUP你的sshd PID:

root @ dzone2#ps -ef | grep ssh root 28075 27576 0 Nov 17?6:11 / usr / lib / ssh / sshd

root 17708 20618   0 10:09:30 pts/37      0:00 grep ssh root@dzone2 # kill -HUP 28075 root@dzone2 # ps -ef|grep ssh
root 17861 20618   0 10:09:44 pts/37      0:00 grep ssh
root 17852 27576   0 10:09:42 ?           0:00 /usr/lib/ssh/sshd

1
这无济于事。问题是无密码的SSH登录(使用RSA密钥对进行身份验证)不起作用。您提供的说明用于使rootSSH登录有效。这完全与这个问题有关。此外,如果root启用了该帐户(Ubuntu中默认未启用),则启用rootSSH登录可能非常危险。
Eliah Kagan 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.