SSH ------ 简介

介绍

SSH是一种使用TCP的非对称加密与对称加密算法相结合的安全网络协议,用于计算机之间的加密登录(两方)和端口转发(三方)。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

用途 - 远程登录

密码登录

ssh user@remote -p port
  • user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
  • port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22

在执行了 ssh 命令之后,远程机器会询问你的密码。在输入密码的时候,屏幕上不会显示明文密码,也不会显示 ******,这样别人就不会看到你的密码长度了,按下回车即可登录

中间人攻击
SSH之所以能够保证安全,原因在于它采用了公钥加密。
整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将 登录密码 和 对称加密密钥 加密后,发送给远程主机。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录,然后双方使用相同的对称加密密钥通信。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https(http+SSL=https)协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

免密码登录

本地生成一个密钥对,把公钥放在远端机器 ~/.ssh/authorized_keys,具体流程如下:

  1. 客户端生成RSA公钥和私钥
  2. 客户端将自己的公钥存放到服务器
  3. 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
  4. 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
  5. 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。
ssh -i 私钥位置 user@hostname -p port

用途 - 端口转发

 ssh隧道大致可以分为3种,分别为本地端口转发,远程端口转发,动态端口转发。

本地端口转发

本地电脑作为应用客户端,也作为SSH client。数据流从本地应用客户端发起。

语法:

ssh -g -N -L -f [本地端口]:[远程IP]:[远程端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]

本地电脑作为SSH client,输入如下命令:

ssh -g -N -L -f 9999:192.168.100.100:80 root@www.test.com -p 22

上面的命令意思是,在本地起一个监听端口9999,访问本机电脑的 http://本地IP:9999 可以直接访问到远程机器的 http://192.168.100.100:80所在的web服务。

远程端口转发(内网穿透)

本地电脑作为应用服务器,也作为SSH client。数据流从远端应用客户端发起。

语法:

ssh -g -N -R -f [远程端口]:[目标机器IP]:[目标机器端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]

本地电脑作为SSH client,输入如下命令:

ssh -g -N -R -f 5707:192.168.164.174:3081 root@120.46.199.14 -p 22
上面的命令意思是,在ssh server所在机器起一个监听端口5707,访问 http://120.46.199.14:5707/ 相当于访问 http://192.168.161.174:3081。这里需要注意,默认ssh server 只会绑定端口在127.0.0.1地址上面,若需要绑定到所有 IP,需要在远程机器 sshd 配置文件中打开GatewayPorts:on。

 

动态端口转发(支持SOCKS协议)

本地电脑作为应用客户端,也作为SSH client。数据流从本地应用客户端发起。

在本地起一个监听端口,往端口发送SOCKS协议的数据,会被转发到各个指定远端IP的端口上,即本地起了一个代理服务器。本地端口转发,只能转发到固定IP的端口上。

语法:

ssh -g -N -D -f [本地监听端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]

本地电脑作为SSH client,输入如下命令:

ssh -g -N -D -f 8888 root@120.46.199.14 -p 22

在使用代理的时候需要客户端手动设置代理服务器的IP和端口号,比如QQ、微信、浏览器都有相应的位置设置代理。

 

posted @ 2018-05-14 20:16  流水灯  阅读(14)  评论(0编辑  收藏  举报