基础功能 - 登录

大多数情况下,我们会使用ssh工具通过以下命令来进行远程登录:

ssh admin@gaoxiaodiao.com

上述命令中,包含了两个隐藏的信息:

  • 1.端口号是22.
  • 2.使用~/.ssh/id_rsa私钥去进行远程登录。

~/.ssh/id_rsa不存在,或使用该私钥无法登录时,该命令会提示我们输入密码。

如果该主机的提供ssh服务的端口并不是默认的22时(假设为2222),命令如下:

ssh admin@gaoxiaodiao.com -p2222

当我们需要指定私钥进行远程登录,命令如下:

ssh -i ~/Download/id_rsa admin@gaoxiaodiao.com

关于ssh登录部分的使用,大概就是这么多,接下来我们来讨论一下ssh工具的其它用法:

实用功能1 - 内网穿透

准确地说,这个功能应该叫端口转发,把本机能访问到的某个端口转发到服务器端。

一提到内网穿透,很多人下意识会想到使用花生壳或者frp等工具,实际上,我们完全可以使用ssh工具来做到这点。

假设,我本机上运行了一个80端口的http服务,我想让别人也可以访问我本机的80端口,那么我可以执行以下命令:

ssh -R 8080:127.0.0.1:80 admin@gaoxiaodiao.com

上述命令成功执行后,别人就可以在http://gaoxiaodiao.com:8080端口访问到你本机80端口上提供的http服务。

或者,我想把树莓派的SSH服务暴露到公网上,那么,在我的主机上需要执行的命令就如下:

# 假设我本机的ip是192.168.1.101,树莓派的ip是192.168.1.102
ssh -R 2222:192.168.1.102:22 admin@gaoxiaodiao.com

这样,只要当前的ssh连接不断开,我便可以通过访问gaoxiaodiao.com2222端口来访问树莓派的SSH服务。

当然目前的这种方式,有一个明显的缺点:会创建一个SSH会话,当SSH会话结束时,其对应的服务也会被中断。

后文会讲到怎么去避免创建SSH会话。

实用功能2 - 流量混淆之特定端口

这个功能,准确地讲也应该叫端口转发,但为了与上一功能做些区分,我这里采用了标题党的做法。

本节要介绍的端口转发其功能是,把服务器上能访问到的某个端口转发到本地。

举个例子,很多情况下,为了隐藏自己的ip,防止被追踪,很多情况下都会使用到Tor

实际上,在不进行任何处理的情况下,使用Tor时,是存在流量特征的,别人虽然不知道你的身份是什么,但知道你正在使用Tor

那么为了消除掉Tor的流量特征,通常我都会使用ssh工具来掩盖这一点。

首先,我需要在服务器上,创建一个Tor服务:

docker run -d --restart=always --net host rdsubhas/tor-privoxy-alpine

接下来,我只需要将服务器的9050端口转发到本地的1081端口,那么通过本地1081端口代理的所有流量都会经过Tor了。

需要执行的命令如下:

ssh -L 1081:127.0.0.1:9050 admin@gaoxiaodiao.com

使用本地1081端口代理访问,检查是否成功:https://check.torproject.org/

file

此时的流量分析软件,只能知道你在访问gaoxiaodiao.com22端口,并不知道你在使用Tor

实用功能3 - 流量混淆之所有流量

上一小节介绍的是将服务器能访问到的某个端口转发的本地,本小节要介绍的功能就更加强大了,那就是ssh的socks5代理功能。

假设,我们要访问google,按照上小节提到的端口转发的办法去做,那就太麻烦了: 首先,需要ping命令,查看google.com的ip地址。 然后,将google.com的某个ip的443端口,转发至本地的443端口。 最后,修改本机的hosts文件,将google.com域名的主机,设置为127.0.0.1。

这样做的确可以访问google.com,可假如此时的我又想访问youtube.com呢?

是不是又得再来一遍?够不够崩溃???

所以,接下来要介绍的socks5代理的功能就可以大放异彩了。

只需要执行以下命令,就可以在本地1080开启一个sock5代理的端口:

ssh -D 127.0.0.1:1080 admin@gaoxiaodiao.com

接下来,所有通过本机的1080端口的流量,都会以gaoxiaodiao.com主机的身份去访问所有的服务。

此功能,常用于临时科学上网、内网渗透跳板等。

其他选项

本小节内容,都是为了方便上述提到的实用功能的使用,选项如下:

-N: 不执行远程命令
-C: 压缩gzip算法
-f: 后台
-T: 不分配TTY
-q:静默模式
-n:禁止ssh读取终端输入( Redirects stdin from /dev/null)

以sock5代理为例,常用命令如下:

ssh -i ~/Documents/id_rsa -NCfTqD 127.0.0.1:1081 admin@gaoxiaodiao.com