- 论坛徽章:
- 0
|
[原创] Openssh中如何配置基于主机的认证?
SSH协议中主要的几种认证包括:主机认证,密钥认证和密码认证。前两种认证方式都可以实现对主机的自动登陆(即不需要输入密码),但由于密钥认证主要是用户级的,而主机认证是系统级的,比较之下密钥认证安全程度更高一些。在一些相互信任的环境里,主机认证可以保证从某主机登陆的所有用户不需要输入密码,在某种程度上简化了认证操作。
以下主要介绍一下在Openssh(版本3.7.1p2)中如何实现主机认证。
在SSH服务器端(假设为服务器A,假设客户端为服务器B):
1. 在/etc/sshd_config中加上:HostbasedAuthentication yes (取决于ssh的安装,sshd_config可以位于不同的目录下,比如/etc/ssh)。
2. 如果服务器使用DNS的话,把SSH客户端加入A的/etc/hosts中。这是因为当客户向主机看出认证请求时,会发过自己的主机名,这通常为短名。但服务器会对客户的IP地址进行反解析,通过DNS得到的是FQDN名,也就是长名。其后SSHD会对这两者进行比较以保证客户机是“无伪装的”。如果不把客户机加入/etc/hosts中的话.短名和长名将不匹配,SSHD会认为请求无效,这一点和sendmail服务器有点相似。
3. 把SSH客户端加入/etc/hosts.equiv中(每一客户端名占一行),比如
serverb
serverc
4. 重启SSHD服务器。
在SSH客户端,也就服务器B上:
1. 同样在/etc/sshd_config中加上:HostbasedAuthentication yes
2. 找到ssh-keysign这个文件(比如/opt/openssh/libexec下),把它设为setuid。ssh-keysign是用来读取主机的私钥和公钥的,但由于这一对密钥只允许root读写,所以必须把它setuid以保证普通用户也可以读出系统密钥。
chmod u+s ssh-keysign
3. 在/etc/ssh_config中允许使用ssh-keysign:
EnableSSHKeysign yes
4. 在客户机上产生一对RSA的密钥:
/opt/openssh/bin/ssh-keygen -t rsa -f /etc/ssh_host_rsa_key -N ""
5. 把客户机上产生的公钥(ssh_host_rsa_key.pub)传到服务器的/etc/ssh_known_hosts里。要特别注意把服务器的公钥转化为ssh_known_hosts的格式:
serverb,serverb.domain.com,10.16.xx.128 ssh-rsa AAAAB.....eR=
也就是:服务器B名,服务器B全名,IP地址 ssh-rsa 公钥
/etc/ssh_known_hosts可以包含多个客户机,每个客户机占一行。
下面普通用户就可以从客户机B上登陆了服务器A而不需要密码了:ssh -l user serverA。注意以上方法并不适用于root用户,由于超级用户的特殊性,如果要实现root的无密码登陆的话,还需要做以下几步:
1. 在服务器A的/etc/sshd_config上,加上:
IgnoreRhosts no
这主要是因为(与BSD的R系列命令相同),/etc/hosts.equiv不能用于root用户。要配置客户机的直接登陆,只能在<root home>;/.rhosts或<root home>;/.shosts中设定。所以必须激活SSHD对.shosts的读取。
2. 在root的宿主目录下,加上服务器B:echo serverb >;>; ~/.shosts 这样root用户也可直接无密码登陆了。
如果需要进行一些调试的话,可以在A上这样启动sshd: sshd -dd,然后在B上这样启动ssh: ssh -vv serverA。观察两个终端可以得到一些有帮助的信息。 |
|