如何在Linux上允许SSH主机密钥(Fedora 10&CentOS 5.2)

我正在尝试从基于Mac OS X 10.5 Leopard Server的中央备份服务器将SSH主机密钥设置为运行Fedora 10和CentOS 5.2的两台Linux服务器。 我们通常采用的方法是将其放在〜/ .ssh / authorized_keys中,但仍然会提示input密码。

我不是这些框的常规pipe理员,我知道默认情况下可能会禁用SSH主机密钥。 如何启用SSH主机密钥?

更新:我已经在/ etc / ssh / ssd_config中取消了“PubkeyAuthentication yes”的注释,并运行service restart sshd ,但没有奏效。 取消注释所有三行('RSAAuthentication','PubkeyAuthentication'和'AuthorizedKeysFile'),更正〜/ .ssh的权限并重试。 仍然没有爱。

当我运行ssh -v user@host ,在它提示input密码并出现一些GSS错误之前,我得到以下信息:

 debug1: Next authentication method: publickey debug1: Trying private key: /Users/shortname/.ssh/identity debug1: Trying private key: /Users/shortname/.ssh/id_rsa debug1: Trying private key: /Users/shortname/.ssh/id_dsa debug1: Next authentication method: password 

更多build议?

另一个更新:~/~/.ssh/权限是700。

我一直在创build主机密钥的命令如下:

 cat /blah/ssh_keys_for_shortname/id_dsa.pub | ssh -l shortname -o stricthostkeychecking=no -i /blah/ssh_keys_for_shortname/id_dsa host.domain.tld 'cat - >> ~/.ssh/authorized_keys' 

而当试图连接我使用:

 ssh --verbose -l shortname -o stricthostkeychecking=no -i /blah/ssh_keys_for_shortname/id_dsa host.domain.tld 

所以,显然我们正在使用DSA密钥。 我试过重命名~/.ssh/authorized_keys2 ,但是没有帮助。

我很乐意将密钥存储在默认位置,而不是/blah/ssh_keys_for_shortname/ ,但是它不在我的控制范围之内。

当我看/var/log/audit/audit.log并尝试连接,我得到以下内容:

 type=CRED_DISP msg=audit(1249426114.642:128): user pid=10589 uid=0 auid=501 ses=14 msg='op=PAM:setcred acct="shortname" exe="/usr/sbin/sshd" (hostname=host.domain.tld, addr=192.168.1.149, terminal=ssh res=success)' type=USER_END msg=audit(1249426114.647:129): user pid=10589 uid=0 auid=501 ses=14 msg='op=PAM:session_close acct="shortname" exe="/usr/sbin/sshd" (hostname=host.domain.tld, addr=192.168.1.149, terminal=ssh res=success)' type=USER_LOGIN msg=audit(1249426129.524:130): user pid=10633 uid=0 auid=4294967295 ses=4294967295 msg='acct="shortname": exe="/usr/sbin/sshd" (hostname=?, addr=192.168.1.149, terminal=sshd res=failed)' 

build议?

看起来你有正确的基本知识。

我所见过的最常见的原因是远程authorized_keys文件和上面的目录的权限。 在允许基于密钥的身份validation之前, sshd执行权限检查; 如果不喜欢结果,则不允许authentication。 我通常将~/.ssh设置为0700,将~/.ssh/authorized_keys为0600.我相信实际的$ HOME不能有组或者世界写入,尽pipe读取没有问题。

如果仍然不能解决这个问题,下一步就是在服务器端进行一些debugging:

 server$ /usr/sbin/sshd -d -p 2222 

然后从客户端连接到“debugging”服务器:

 client$ ssh -v user@host -p 2222 

您将在服务器上的stderr上获得丰富的debugging信息。 我还没有遇到一个身份validation问题,我无法从那里追踪。

这是我要遵循的过程。

  1. 在OS X服务器上创build公钥/私钥对。 提示时,我没有指定密码。

    $ ssh-keygen -b 4096 -C“myusername @ myhostname”-t rsa

  2. 将OS X服务器上〜/ .ssh / id_rsa.pub的内容复制到Centos / Fedora主机上正确的用户主目录下的〜/ ssh / authorized_keys中。

  3. validation所有主机上的权限是否正确。 目录〜/ .ssh应该是0700模式,里面的文件应该是0600(你可以使用0644作为公钥,但是不会受到更多的限制)。

如果基于密钥的身份validation尚未运行,请validation每个CentOS / Fedora主机上的sshd_config文件(/ etc / ssh / sshd_config)中是否设置了以下值。 (这些值应该是默认值。)

 RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys 

如果仍然不起作用,请尝试使用ssh -v user@host来查看连接时发生了什么。 添加更多v来查看有关发生的更多细节。

编辑 :尝试validation完整的目录树从/到问题的.ssh目录的权限。 如果该path中的任何一个目录是组或全局可写的,则SSH将被popup。 运行这个来打印出path中所有目录的权限:

 j="" ; for i in `echo ~baumgart/.ssh | sed 's%/% %g'` ; do ls -ld $j/$i ; j=$j/$i ; done 

另外 – 在CentOS / Fedora系统上检查日志文件中的sshd消息 – 这应该有一个有用的消息,说明有什么问题。 它应该在/ var / log / messages或/var/log/auth.log中。 如果找不到,请执行grep sshd /var/log/*

如果您已经正确设置了用户/组权限,那么您可能会遇到SELinux问题。 最简单的方法是使用restorecon -R /home/user/.ssh/ 。 错误将logging在/var/log/audit/audit.log ,您可以使用audit2why工具让系统解释可能发生的任何SELinux拒绝。

首先要指出的是/var/log/audit.log正在loggingSELinux活动。

我猜如果你在这个日志里看得更远一些,你会看到另外一个看起来像这样的条目:

type=AVC msg=audit(xxxxxxxxx.xxx:xxxx): avc: denied { search } for pid=xxxxx comm="sshd" name="xxxxxx" dev=xxxx ino=xxxxxx scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:default_t:s0 tclass=dir

这意味着你的sshd进程被加载的selinux策略所限制,并且无法访问授权密钥文件所在的文件系统path。

要validationselinux策略是否处于活动状态,请运行sestatus命令,您将看到以下输出:

 SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 23 Policy from config file: targeted 

要快速testing是否存在问题,可以通过发出setenforce permissive命令将SELinux临时设置为许可模式。 这样做后,再次运行sestatus ,您应该看到以下输出:

 SELinux status: enabled SELinuxfs mount: /selinux Current mode: permissive Mode from config file: enforcing Policy version: 23 Policy from config file: targeted 

再次尝试你的ssh连接,并考虑到你所有的其他configuration是正确的,它应该工作。

outlook未来,您应该创build自定义规则,允许访问您之后的path,但这超出了本帮助的范围。

为了使这个改变持续下去(在重新启动之后),你需要修改/etc/selinux/config文件并改变:

 SELINUX=enforcing 

 SELINUX=permissive 

/ etc / ssh / sshd_config中的'PubkeyAuthentication yes'?