用过linux系统的朋友,基本肯定会用过ssh。因为大部分的linux登录都是通过ssh将进行登录,除非你用的是类似windows的桌面版。
一、什么是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-TRANS]
提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
三、ssh的使用场景
1、远程登录
1 ssh -p 22 user@host
参数: -p:指定端口号。user:登录的用户名。host:登录的主机
如果是使用默认的端口22,则可以省略 -p参数: ssh user@host 。
通常使用默认端口以外的其他端口,可以有效减少被攻击的机会。
此外,如果本地正在使用的用户名与远程登录的用户名一致,登录用户名也是可以省略的, 即: ssh host
2、SSH端口转发
即将TCP 端口的网络数据,转发到指定的主机某个端口上,在转发的同时会对数据进行相应的加密及解密。其中转发,包含本地转发、远程转发、动态转发;
转发参数如下:
-C:压缩数据-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机;
-N :不执行脚本或命令,通常与-f连用;
-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接;
-L : 本地端口:目标IP:目标端口;
-D : 动态端口转发-R : 远程端口转发;
-T :不分配 TTY 只做代理用;
-q :安静模式,不输出 错误/警告 信息;
1)本地端口转发:
把本地端口的请求,转发的目标端口;参数格式:ssh -L 本地网卡地址:本地端口:目标端口 用户@目标地址。
2)远程端口转发
把远程端口的请求,转发的目标(本地)端口;参数格式:ssh -R 远程地址:远程端口:目标地址:目标端口
3)动态转发
对于本地端口转发和远程端口转发,都存在两个一一对应的端口,分别位于SSH的客户端和服务端,而动态端口转发则只是绑定了一个本地端口,而目标地址:目标端口则是不固定的。目标地址:目标端口是由发起的请求决定的,比如,请求地址为192.168.1.100:3000,则通过SSH转发的请求地址也是192.168.1.100:3000。具体参数如下:
# 在本地主机A1登陆远程云主机B1,并进行动态端口转发
sh -D localhost:2000 root@103.59.22.17
技术之路学无止境!