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地址】