SSH 的三板斧¶
ssh的功能无比强悍,对于一个**Unix/Linux**而言,只要开放一个ssh服务,就可以轻松,随意,快捷,方便的全盘操控这台机器。相信很多功能大家都很熟悉了,我这里只是想把它的其中三个具有杀手级的功能例举一下:
端口转发¶
端口转发,也就是-L参数的设置。以我的实际例子来说明吧,我在家里上网,设置的是局域网,IP地址是192.168.100.101
。公司总部呢,也是用的是局域网地址,172.16.0.0
网段。我需要访问公司内部的一台应用服务器,比如172.16.81.111
。我该怎么办呢?恰好,公司有一台网关服务器,有两块网卡,一块是设置的公网IP地址,比如219.99.12.23
。另外一块网卡,则是公司的内网的IP地址,比如172.16.81.220
。这台服务器开启了SSH服务。那么我要做的便是执行下面的指令:
ssh -f -N -L 8080:172.16.81.111:80 wgzhao@219.99.12.23
一旦登陆成功后,在自己的电脑上,打开浏览器,在地址栏,输入http://localhost:8080,你能看到什么呢?它等价于访问了http://172.16.81.111/。对就是访问了公司总部指定的服务器的WEB服务(假定80端口对应的是WEB服务)。 当然,这里也要注意,如果自己的电脑已经使用了8080端口,则上述指令不会成功,换一个不常用的高端端口吧。 这条指令,基本上可以让你无障碍的访问公司任何服务器的任何服务,甚至是SSH服务(前提是已授权访问)。嗯,想想看,如果上面的指令改成下面这样:
ssh -f -N -L 8022:172.16.81.111:22 wgzhao@219.99.12.23
然后你再执行
ssh -p 8022 localhost
会是什么样的结果呢? 此时,你已经通过ssh进入到了公司服务器。我们再进一步,把上述指令改成
ssh -X -p 8022 localhost
然后执行startx或者gnome-session或者其他的,结果又会是怎样呢?
端口绑定¶
端口绑定,也即 ssh 的 -R
参数配置。依然举个例子,不在一起的一个朋友,一台机器有些故障需要解决,我需要登陆到他的机器,第一个办法用不上,因为没有一台具有公网IP地址的网关机器。其他办法呢?显然Windows下的那套QQ远程,MSN 远程都派不上用场了。怎么办?Linux 只有 Linux 的解决办法。那就是利用可以通过 ssh 访问的一台有公网IP地址的机器。它可以是VPS,可以是独立主机,总之,只要能够让双方通过ssh访问得到就可以。
首先,让我的朋友执行下面的指令:
ssh -qTfN -R 9922:localhost:22 account@222.222.233.212
执行成功后。
我在执行下面的指令: ssh account@222.222.233.212
登陆成功后,可以执行
netstat -lpnt |grep 9922
你应该可以类似下面的输出:
$ netstat -ln |grep 9922
tcp 0 0
127.0.0.1:9922 0.0.0.0:*
LISTEN tcp 0 0 ::
1:9922 :::*
LISTEN
这里的9922
端口,实际上就是我朋友电脑上的ssh服务。立马在这台服务器上继续执行下面的指令吧:
ssh -p 9922 puser@localhost
puser是我朋友电脑上的账号。登陆成功后,我就进入了我朋友的电脑。OK,想干什么都可以做了。
完成后,我朋友只需要把那条包含9922
的进程kill
就可以了。
动态端口转发¶
动态端口转发,也即 -R
参数的配置,它的目的是把本地指定的一个端口通过socket模式转发到指定的远程服务器上的特定端口。比如说,我在美国有一个VPS,有用SSH访问功能,如果我在本地执行下面的指令:
ssh -D8580 -qnTfN account@myserver.example.com
然后呢,比如,打开你的浏览器,设置代理ip地址为127.0.0.1
,端口是8580
,代理类型是SOCKET5
,注意是5,SOCKET4不行(至少我没有测试成功)。设置完成后,即可访问各类网站。