我正在尝试从基于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问题,我无法从那里追踪。
这是我要遵循的过程。
在OS X服务器上创build公钥/私钥对。 提示时,我没有指定密码。
$ ssh-keygen -b 4096 -C“myusername @ myhostname”-t rsa
将OS X服务器上〜/ .ssh / id_rsa.pub的内容复制到Centos / Fedora主机上正确的用户主目录下的〜/ ssh / authorized_keys中。
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'?