一、SSH介绍及特性

1、介绍 ** ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。**

具体的软件实现: 
	OpenSSH: ssh协议的开源实现,CentOS默认安装 
	dropbear:另一个开源实现 
SSH协议版本 
	v1: 基于CRC-32做MAC,不安全;man-in-middle 
	v2:双方主机协议选择安全的MAC方式 
	基于DH算法做密钥交换,基于RSA或DSA实现身份认证 
两种方式的用户登录认证:
	基于password 
	基于key
	端口号:22
	-------------------------------------------------------------------------------------
ssh, 配置文件:/etc/ssh/ssh_config 
	Host PATTERN 
		StrictHostKeyChecking no 首次登录不显示检查提示 
格式:ssh [user@]host [COMMAND] 
		   ssh [-l user] host [COMMAND] 
			 -p port:远程服务器监听的端口 
			 -b:指定连接的源IP 
			 -v:调试模式 
			 -C:压缩方式 
			 -X: 支持x11转发 
			 -Y:支持信任x11转发 
			-t:  强制伪tty分配 
				ssh -t remoteserver1 ssh remoteserver2

  **2、ssh服务登录验证 *** 当用户远程连接ssh服务器时,会复制ssh服务器 /etc/ssh/ssh_hostkey.pub(CentOS7默认是 ssh_host_ecdsa_key.pub)文件中的公钥到客户机的 ~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥 ,不能匹配,将拒绝连接

①基于用户和口令登录验证 1.客户端发起ssh请求,服务器会把自己的公钥发送给用户 2.用户会根据服务器发来的公钥对密码进行加密 3.加密后的信息回传给服务器,服务器用自己的私钥解密, 如果密码正确,则用户登录成功、

  

用的xshell连接的,之后会弹出询问密码的对话框。


②基于密钥的登录方式 : 1.首先在客户端生成一对密钥(ssh-keygen) 2.并将客户端的公钥ssh-copy-id 拷贝到服务端 3.当客户端再次发送一个连接请求,包括ip、用户名 4.服务端得到客户端的请求后,会到authorized_keys中 查找,如果有响应的IP和用户,就会随机生成一个字符串 ,例如:acdf 5.服务端将使用客户端拷贝过来的公钥进行加密,然后发 送给客户端 6.得到服务端发来的消息后,客户端会使用私钥进行解密 ,然后将解密后的字符串发送给服务端 7.服务端接受到客户端发来的字符串后,跟之前的字符串进 行对比,如果一致,就允许免密码登录


注:具体步骤写在最后啦

环境:用6通过密钥去连接7的HR

centos6.9 user:xs 172.18.253.118
centos7.4 user:HR 172.18.250.111

1、生成公钥

2、传送公钥

3、对比公钥并连接

通过这种方式连接以后就不用在输入密码口令了,使用scp命令同理


加密密钥方式连接相当于下面步骤第5、6、7步骤

注:只要输入一次,以后就不用了,但退出了就要再来一次

基于密钥认证步骤 
(1) 在客户端生成密钥对 
	ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]     -t 指定加密方式,-f指定加密文件
	(2) 把公钥文件传输至远程服务器对应用户的家目录 
	ssh-copy-id [-i [identity_file]] [user@]host
(3) 测试 
(4) 在SecureCRT或Xshell实现基于key验证 在SecureCRT工具—>创建公钥—>生成Identity.pub文件 转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化 格式),并复制到需登录主机上相应文件authorized_keys中, 注意权限必须为600,在需登录的ssh主机上执行: 
	ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重设私钥口令: 
	ssh-keygen –p 
(6)验证代理(authentication agent)保密解密后的密钥 
	这样口令就只需要输入一次 
	在GNOME中,代理被自动提供给root用户 
	否则运行ssh-agent bash 
(7)钥匙通过命令添加给代理 
	ssh-add

二、SSH转发

优点: 加密 SSH Client 端至 SSH Server 端之间的通讯数据 突破防火墙的限制完成一些之前无法建立的 TCP 连接

环境 centos7 :172.18.250.11 centos6 B1:172.18.253.118 centos6 B2:172.18.253.69 要在centos7上 装上telnet包设置防火墙拒绝B2,安装完后启动:systemctl start telnet.socket

  思维导图:7不允许B2直连(也就是它们ping不通),但允许B1连接。B2通过telnet封装在ssh连接B1,通过B1用telnet连接centos 7。顺便更正一下B2的地址是:172.18.253.69在后续图中可见。


B2链接之前

  在B2上执行命令,输入中间人B1的口令   此时B1的信息   再来看下centos7的信息   连接成功的B2