SSH是什么
SSH 是一种应用层协议,用于计算机之间的远程登录。这种登录是安全的,即使被中途截获,密码也不会泄漏。
SSH 协议的传输层采用的是 TCP 协议,所以在建立 SSH 连接之前必定会有 tcp 连接。
SSH 之所以能够保证安全,是因为其采用公钥加密。
- 远程主机收到登录请求,会将自己的公钥发给用户。
- 用户使用公钥对登陆密码进行加密,发到远程主机。
- 远程主机用私钥解密登录密码,如果密码正确,就同意登录。
中间人攻击
虽然ssh协议在被中途截获后仍能保证安全性,但如果有人截获登录请求后,恶意冒充远程主机,再用伪造的公钥获取用户登录密码,用这个密码登录远程主机,那么ssh便不再安全。
因为不像 HTTPS 协议,SSH 协议没有证书中心(CA)签证,也就是说,SSH的公钥都是自己签发的。
公钥登录
git 的 ssh 便是使用公钥登录。
使用密码登录,每次都必须输入密码,有些麻烦。使用公钥登录,可以省去输入密码的过程。
公钥登录,可以看作是私钥加密,公钥解密。首先,用户将自己的公钥存储在远程主机上。登录的时候,远程主机会发送一段随机字符串,用户用自己的私钥加密后,再发回来,远程主机用事先存储的公钥进行解密。如果字符串匹配,则说明用户可信。
数据传输
ssh不仅可以用于远程登录,还可以与远程主机进行数据传输。比如将本机某个目录下的文件复制到远程主机的目录下。 ssh还可以绑定本机端口,将端口上数据传到远程主机。这里问网络连接的安全性提供了一种思路:可以让那些不加密的网络连接,改走ssh,从而提高安全性。 假定我们让8080端口的数据全部传到远程主机:
$ ssh -D 8080 user@host