从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
在需要登录的主机(openssh-server)上拥有帐号和口令,就可以登录到需要登录的主机(openssh-clients)。在client端和server端的数据传输都会被加密,但是不能保证正在连接的服务器就是真正需要连接的服务器。
第二种级别(基于密匙的安全验证)
创建一对密匙,把公用密匙放在需要访问的服务器上(server端)。需要连接到openssh-server时,客户端用创建的密匙首先进行安全验证请求。服务器收到请求之后,在该服务器上用户主目录下寻找创建的公匙,然后把公钥和客户端发送来的秘钥请求进行验证。
==============================
一对秘钥:公钥、私钥。使用公钥加密,私钥来解;使用私钥加密,公钥验证。公钥的作用:加密和验证;私钥的作用:加密和解密。
==============================
基于密钥的验证(无密码登录)
sunny@hhh1 ==>> root@hhh2 |
1&2# rpm -qa | grep openssh-clients
1&2# rpm -qa | grep openssh
1$ ssh-keygen (一路回车)
1$ ls ~/.ssh
1$ scp ~/.ssh/id_rsa.pub root@hhh2:/root/test/
1$ vi /etc/ssh/ssh_config
* ssh-keygen生成的正好是这个名字。前面是个“#”,表示这个是默认值。
1$ ssh hhh2
2# cat /root/test/id_rsa.pub > /root/test/loginhhh
2# chmod 700 /root/test
2# chmod 600 /root/test/logintest
2# vi /etc/ssh/sshd_config
2# /etc/init.d/sshd restart
2# exit
1# ssh hhh2
* 说明:
设置无密码登录以后,首次登录需要确认一次登录。只需要输入 “yes” 。
上面的说明就是说如果在脚本中这么个应用虽然免去输入密码,可是还得输入“yes”来确认呢。如果有1w台主机需要登录呢。是不是要疯呢,答案是不必疯。
# vi /etc/ssh/ssh_config
该选项默认是 ask ,这么一个修改,便不再询问。……(* ssh_config)
* FAQ-01
经常在配置完成后,发现登陆时提示需要密码。检查好几遍都没有发现那里出现错误。
在上边的例子中是把公钥文件改名。而实际生产环境常常考虑到多人维护的问题,使用默认
名称。这个时候文件名应该是:authorized_keys,出现问题的症结在于文件名错误地
写成:authorized.keys。好像以“.”分隔文件名已经成为习惯了。
# cp id_rsa.pub authorized_keys
* FAQ-02
配置上问题检查完了,也有无法登陆的问题。关闭防火墙,检查selinux试试看。
# sestatus
# vi /etc/selinux/config
# iptables -L
# iptables -F
# /etc/init.d/iptabes save