1、SSH概述 
    传统的网络访问程序telnet在通信时很不安全,因为它使用明文方式传送口令和数据,通过技术手段 非常容易截得这些口令和数据。同时,这些服务程序的安全验证方式也是有弱点的。他没有验证机制,一旦有人采用”中间人“的方式,冒充真正的服务器接受传送给服务器的数据,就会出现严重的问题SSH(Secure SHell)可以将所有传输的数据进行加密,这样一些***方式就不能成功了,并且也能够阻止DNS和IP欺骗;还有一个额外的好处,就是SSH会压缩传输的数据,能够加快传输速度,目前常用的SSH软件是OpenSSH。SSH存在两个版本V1和V2,Red Hat Enterprise Linux 5使用的是V2,与V1相比,V2加强了密钥的认证方式,不仅在SSH建立连接时检查密钥,还会在通信中,检测密钥信息。而OpenSSH支持这两种版本
1.1、SSH的配置文件 
   SSH常用的配置文件有/etc/ssh/ssh_config-->客户端配置文件,/etc/ssh/sshd_config-->服务器端配置文件
1.1.1、客户端配置文件 
该文件的格式为”字段值",其中字段忽略大小写,下面我们来简单的介绍一下常用的字段 
Host *     #指定配置生效的主机,设置的主机将使用其他设置。”*“表示所有的计算机
ForwardAgent    #设置连接是否经过验证代理(如果存在)转发给远程计算机
ForwardX11       #设置xll连接是否被自动重定向到安全的通道和显示集
RhostsRSAAuthentication  #设置是否使用rsa算法的基于rhosts的安全验证
RSAAuthentication   #设置是否使用rsa算法进行安全验证
StrictHostKeyChecking  #如果设置为yes,ssh就不会自动把计算机的密钥加入$home/.ssh/known_hosts文件,一旦计算机的密钥发生了变化,就拒绝连接
BatchMode      #如果设为yes,passphrase/password的提示被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用
CheckHostIP #设置ssh是否查看连接到服务器的主机IP地址,以防DNS欺骗,建议设置为yes
Port 22     #设置连接到远程主机的端口
IdentityFile  #设置从哪个文件读取用户的rsa安全验证标识
Protocol      #设置客户端使用ssh版本
Cipher        #设置加密方式
EscapeChar    #设置escape字符
1.1.2、服务器端配置文件
该文件的格式为”字段值",其中字段忽略大小写,下面我们来简单的介绍一下常用的字段
Port 22   #设置sshd监听的端口号
ListenAddress 0.0.0.0   #设置sshd服务器绑定的IP地址,0.0.0.0表示侦听所有地址
HostKey /etc/ssh/ssh_host_key   #设置包含计算机私人密钥的文件
ServerKeyBits 768    #定义服务器密钥位数
LoginGraceTime 2m    #设置用户不能成功登陆时,切断连接之前服务器需要等待的时间(秒)
KeyRegenerationInterval 1h   #设置在多少秒之后自动重新生成服务器的密钥,重新生成没要你
是为了防止盗用密钥解密截获的信息
PermitRootLogin no   #设置root是否能够使用SSH登录,为了保证服务器的安全,建议不要设置为yes
IgnoreUserKnownHosts no   #设置ssh daemon是否进行rhostsrsaauthentication安全验证时忽略用户的$home/.ssh/known_hosts
IgnoreRhosts yes      #设置验证的时候是否使用rhosts和shosts文件
strictmodes yes       #设置SSH在接收登录请求之前是否检验用户目录和rhosts文件的权限和所有权,防止将目录和文件设成任何人都有写权限
X11Forwarding yes     #设置是否允许xll转发
PrintMotd yes         #设置sshd是否在用户登录的时候显示/etc/motd中的信息
loglevel info         #设置记录日志消息的层次
PasswordAuthentication  yes   #设置是否允许口令验证
PermitEmptyPasswords  no  #设置是否允许用户口令为空的账号登录
Allowusers tom           #设置允许的用户,数量可以为多个,使用空格隔开
2、OpenSSH配置文件
2.1、口令认证
默认情况下,SSH仍然使用传统的口令验证。在使用这种认证方式时,不需要进行任何配置,用户就可以使用SSH 服务器存在的账号和口令登录到远程主机。所有传输的数据都会被加密,但是,口令验证是不能保证连接的服务器 就是真正的目的服务器。如果有其他服务器在冒充,客户端很有可能受到”中间人“的***。
2.2、密钥认证
密钥认证需要依靠密钥。首先创建一对密钥,并把密钥保存在远程服务器上。当登录远程主机时,客户端软件就会 向服务器发出请求,请求用自己的密钥进行认证。服务器收到请求后,首先在服务器的用户主目录下寻找公钥,然后 检查此公钥是否合法,如果合法就用公钥加密生成随机数,并返回给客户端。客户端软件收到服务器的回应后,使用 案私钥将数据解密并发给服务器,因为用公钥加密的数据只有用私钥解密。服务器经过比较就可以知道该客户连接的合法性。
2.2.1、案例:假如某公司内部有多台服务器。管理员为了保证服务器的安全性,设置了专有的系统账号test,并选择使用OpenSSH进行远程管理
配置过程如下:
 
  
  1. a、编辑远程服务器的/etc/ssh/sshd_conf文件  
  2. 修改PasswordAuthentication字段,设置为no,禁止口令认证,只允许使用密钥证  
  3. PasswordAuthentication no
  4.  
  5. b、在客户端生成密钥  
  6. [root@station41 ~]# ssh-keygen -d  
  7. Generating public/private dsa key pair.  
  8. Enter file in which to save the key (/root/.ssh/id_dsa): /home/test/.ssh/id_dsa  
  9. Enter passphrase (empty for no passphrase):   
  10. Enter same passphrase again:   
  11. Your identification has been saved in /home/test/.ssh/id_dsa.    #私钥文件  
  12. Your public key has been saved in /home/test/.ssh/id_dsa.pub.    #公钥文件  
  13. The key fingerprint is:  
  14. 12:a6:98:09:b3:fd:99:7e:36:14:8f:fd:62:14:46:bc root@station41.example.com  
  15. [root@station41 ~]# cd /home/test/.ssh/  
  16. [root@station41 .ssh]# ls  
  17. id_dsa  id_dsa.pub  
  18.  
  19. c、发布公钥  
  20. [root@station41 .ssh]# ssh-copy-id -i /home/test/.ssh/id_dsa.pub 172.16.50.22  
  21. 26  
  22. The authenticity of host '172.16.50.22 (172.16.50.22)' can't be established.  
  23. RSA key fingerprint is 98:08:cc:c1:2b:da:c2:34:c2:5d:fe:20:58:ec:b7:1b.  
  24. Are you sure you want to continue connecting (yes/no)? yes  
  25. Warning: Permanently added '172.16.50.22' (RSA) to the list of known hosts.  
  26. root@172.16.50.22's password:   
  27. Now try logging into the machine, with "ssh '172.16.50.22'"and check in:  
  28.  
  29.   .ssh/authorized_keys  
  30.  
  31. to make sure we haven't added extra keys that you weren't expecting.  
  32.  
  33. d、连接远程服务器  
  34. [root@station41 ~]# ssh -l test 172.16.50.22  
  35. Last login: Fri Apr  5 23:51:44 2013 from 172.16.50.22