一、SSH简介
SSH 为 Secure Shell 的缩写,由 IETF 的 络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他 络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补 络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
SSH免密码登录原理,我们先来说说SSH的安全验证,SSH采用的是”非对称密钥系统”,即耳熟能详的公钥私钥加密系统,其安全验证又分为两种级别。
SSH验证:从客户端来看,SSH提供两种级别的安全验证。
1、基于口令的安全验证
这种方式使用用户名密码进行联机登录,一般情况下我们使用的都是这种方式。整个过程大致如下:
(1)客户端发起连接请求。
(2)远程主机收到用户的登录请求,把自己的公钥发给客户端。
(3)客户端接收远程主机的公钥,然后使用远程主机的公钥加密登录密码,紧接着将加密后的登录密码连同自己的公钥一并发送给远程主机。
(4)远程主机接收客户端的公钥及加密后的登录密码,用自己的私钥解密收到的登录密码,如果密码正确则允许登录,到此为止双方彼此拥有了对方的公钥,开始双向加密解密。
PS:当 络中有另一台冒牌服务器冒充远程主机时,客户端的连接请求被服务器B拦截,服务器B将自己的公钥发送给客户端,客户端就会将密码加密后发送给冒牌服务器,冒牌服务器就可以拿自己的私钥获取到密码,然后为所欲为。因此当第一次链接远程主机时,在上述步骤的第(3)步中,会提示您当前远程主机的”公钥指纹”,以确认远程主机是否是正版的远程主机,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到 ~/.ssh/known_hosts文件中。
2、基于密匙的安全验证
这种方式你需要在当前用户家目录下为自己创建一对密匙,并把公匙放在需要登录的服务器上。当你要连接到服务器上时,客户端就会向服务器请求使用密匙进行安全验证。服务器收到请求之后,会在该服务器上你所请求登录的用户的家目录下寻找你的公匙,然后与你发送过来的公匙进行比较。如果两个密匙一致,服务器就用该公匙加密”质询”并把它发送给客户端。客户端收到”质询”之后用自己的私匙解密再把它发送给服务器。与第一种级别相比,第二种级别不需要在 络上传送口令。
PS:简单来说,就是将客户端的公钥放到服务器上,那么客户端就可以免密码登录服务器了,那么客户端的公钥应该放到服务器上哪个地方呢为你要登录的用户的家目录下的 .ssh 目录下的 authorized_keys 文件中(即:~/.ssh/authorized_keys)。
3、使用场景
rsync自动备份时免密码登录,scp拷贝文件,集群环境中需要主机间互相通信如:Hadoop
二、SSH密钥验证的机制
实验准备:准备两台CentOS系统服务器
服务端:192.168.42.8
客户端:192.168.42.9
1)安装SSH软件,执行以下命令
[root@rsync-servser ~]# yum -y install openssh-clients openssh-server
[root@rsync-servser ~]# ssh-keygen -t rsa -P ”
( 参数-P是大写的,-P后面的单引 对与大写P之前有空格)
2)直接按确定(Enter)即可,会生成公钥(id_rsa.pub),私钥(id_rsa)文件
3)拷贝公钥到客户端
默认端口普通分发方式:
[root@rsync-servser ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.42.9
输入确定或者yes,然后输入客户端root登录密码
非默认端口(特殊端口如52113)分发方式:推荐
[root@rsync-servser ~]# ssh-copy-id -i .ssh/id_rsa.pub “-p 52113 root@192.168.42.9”
也可以通过修改ssh-copy-id ,把端口放到里面。分发的时候就不用带端口了
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.42.9
修改步骤
root账户登陆
which ssh-copy-id 查看路径为/usr/bin/ssh-copy-id
vim ssh/usr/bin/h-copy-id 或者 vim ‘which ssh-copy-id’
4)免密匙认证测试(客户端需要安装openssh-clients)
[root@rsync-servser ~]# touch test.txt
[root@rsync-servser ~]# scp test.txt root@192.168.42.9:/root
特殊端口远程拷贝命令 scp -P52113 test.txt root@192.168.42.9:/root
如果带有目录加 -rp : scp -P52123 -rp $1 root@192.168.42.9:/root
可以把上述命令放到脚本里面
vim fenfa.sh
scp -P52113 test.txt root@192.168.42.9:/root
scp -P52113 test.txt root@192.168.42.10:/root
这样可以实现批量分发。
控制机放私钥,目标机器放公钥。
5)客户端验证文件是否拷贝过来
结束。
安装sshpass
使用前提:对于未连接过的主机。而又不输入yes进行确认,需要进行sshd服务的优化:
# vim /etc/ssh/ssh_config
StrictHostKeyChecking no
# vim /etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no# service sshd restart
sshpass 命令的安装:
实例1:直接远程连接某台主机:
命令:sshpass -p xxx ssh root@192.168.11.11
sshpass -p xxx ssh root@192.168.11.11 ‘w’ -o StrictHostChecking=no 免输入yes。
实例:本地执行远程机器的命令:
命令: sshpass -p xxx ssh root@192.168.11.11 “ethtool eth0”
实例2:远程连接指定ssh的端口:
命令:sshpass -p 123456 ssh -p 1000 root@192.168.11.11 (当远程主机不是默认的22端口时候)
实例3:从密码文件读取文件内容作为密码去远程连接主机
命令:sshpass -f xxx.txt ssh root@192.168.11.11
实例4:从远程主机上拉取文件到本地
命令: sshpass -p ‘123456’ scp root@host_ip:/home/test/t ./tmp/
实例5:sshpass不可以直接接带特殊字符意义的密码,需要转义或者用小括 ,或者指定文件的方式来连接都可以规避这个问题。
附录:sshpass的安装
Ubuntu:
centos:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!