SSH免密远程登陆及详解

    SSH(安全外壳协议):为建立在应用层和传输层基础上的安全协议,ssh是目前较为可靠,专门为远程登陆,会话和其他网络服务提供安全 协议。利用ssh协议可以有效的防止远程管理过程中的信息泄露问题,传统的网络服务程序,如ftp,pop和telnet在本质上都是 不安全 的, 因为他们在网络上用明文传输口令和数据,通常使用SSH,可以把所有传输的数据进行加密,能够防止DNS欺骗和IP欺骗,使用SSH,还有一个额外的好处就是传输的数据进过压缩,所以可以加快传输的速度,SSH有很多功能,既可以代替Telnet,又可以为FTP,pop,甚至为PPP提供一个安全的通道,

      验证:对于客户端来说,SSH提供两种级别的安全验证,

1.基于口令的安全验证

  只要知道自己的账号和口令,就可以登陆远程主机,所有传输的数据都会被加密,但是不能保证正在连接的服务器 就是你想连接的服务器可能会有别的服务器在冒充真正服务器,也就是收到“中间人”这种攻击

2.基于密钥的安全验证

需要依靠密钥,也就是你必须为自己创建的一对密钥,并把公用密钥放在需要访问的服务器上,客户端软件就会向服务器发送请求,请求用你的密钥进行安全验证,服务器收到请求之后,现在该服务器上你的主目录下寻找你的公用密钥,然后把它和你发送过的公用密钥进行比较,如果两个密钥一致,服务器就用公用密钥加密“质询”,并把它发送给客户端软件,客户端收到“质询”之后就可以用你的私人密钥解密在把它发送给服务器

用这种方式,可以增加自己密钥的口令,但是与第一种级别相比,第二种级别 不需要再网络上传送口令,第二种级别不仅加密所有的数据,而且“中间人”这种方式也是不可能的(因为他没有你的私人密钥,)但是整个登录的过程中需要10秒

  层次:

SSH主要享有三部分组成:

*传输层协议【SSH-TARNS】

提供了服务器认证,保密性及完整性,此外它还提供了压缩功能,SSH-TARNS通常运行在TCP/IP连接上,也可能用于其他可靠数据流上,SSH-TARNS提供了强力的加密技术,密码主机认证 及完整性保护,

该协议中认证基于主机,并且该协议不执行用户认证,更高层的用户认证可以设计为此协议之上

*用户认证协议【SSH-USERAUTH】

用户向服务器提供客户端用户鉴别功能,它运行在传输层协议SSH-TARNS上面 ,当SSH-USERAUTH开始后,它从底层协议那里接受会话标识符,会话标识符唯一标识会话并且适用于标记已证明私钥的所有协议,SSH-USERAUTH也需要 知道底层协议是否提供保密性保护。

*连接协议【SSH-CONNECT】

将多个加密隧道分成逻辑通道,它运行在用户认证上,提供了交互式登录,远程命令执行,转发TCP/IP连接

 

authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥

  id_rsa : 生成的私钥文件

  id_rsa.pub : 生成的公钥文件

  know_hosts : 已知的主机公钥清单

    如果希望ssh公钥生效需满足至少下面两个条件:

      1) .ssh目录的权限必须是700 

     2) .ssh/authorized_keys文件权限必须是600

【实验案例】

将两台机器开通SSH,最终是的三台机器可以互相免密远程登录

[zhangsan@Joyheros-iPhone ~]$ ssh-keygen -t rsa 

[xiaoyu@localhost ~]$ ssh-keygen -t rsa

我们要想免密登录xiaoyu这台机器,我们需要将自身的公钥发给对方特定的目录下(.ssh/authorized_keys)

# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.20.138

或者

[zhangsan@Joyheros-iPhone .ssh]$ scp id_rsa.pubxiaoyu@192.168.20.138:/home/xiaoyu/.ssh/authorized_keys

[zhangsan@Joyheros-iPhone .ssh]$ ssh xiaoyu@192.168.20.138

Last login: Mon Jun  5 23:17:42 2017 from 192.168.20.167

[xiaoyu@localhost ~]$     #免密登录成功

同理!我们从xiaoyu这台机器上免密登录zhangsan这台机器,也是生成公私密钥之后,将自己的公钥给对方zhangsan主机

[xiaoyu@localhost .ssh]$ scp id_rsa.pub zhangsan@192.168.20.167:/home/zhangsan/.ssh/authorized_keys

[xiaoyu@localhost .ssh]$ ssh zhangsan@192.168.20.167

Last login: Mon Jun  5 22:52:33 2017

[zhangsan@Joyheros-iPhone ~]$#免密登录成功

PS:当我们需要免密登录对方机器时,需要修改目标端主机的sshd_conf配置文件中开启密钥验证的权限如下:

vim /etc/ssh/sshd_config

 

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin no   #禁止root用户登录
PubkeyAuthentication yes   #是否开启公钥登录验证
AuthorizedKeysFile    .ssh/authorized_keys    #指定公钥验证路径
PermitEmptyPasswords no   #设置是否允许密码为空的账号登录
PasswordAuthentication no   #设置是否开启密码验证机制
ChallengeResponseAuthentication no    #是否接受任何密码认证
GSSAPIAuthentication yes  
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no    #指定sshd是否应该对远程名进行反向解析,以此来检查主机名是否与其IP地址真实对应,建议改成no,否则会导致ssh连接很慢
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem    sftp    /usr/libexec/openssh/sftp-server

 

 ps:后续普通目录下的~.ssh的权限为700权限,而公钥的权限为600

后续拷贝公钥时即可执行# ssh-copy-id -i /root/.ssh/id_rsa.pub 【目标主机名&&IP地址】

posted @ 2017-06-06 17:37  Mr&Yu  阅读(1103)  评论(0编辑  收藏  举报