巧用OpenSSH穿透你的防火墙
$ scp -P 22000 authorized_keys* donkey@localhost:.
不过,如果你将全部内容都放在配置文件中,那么你可以将上面的命令缩写为:
$ scp authorized_keys* http:.
要启用上面所提到的基于密钥的访问,你仍然需要将密钥文件追加到‘http’服务器上的~/.ssh中。这可以通过运行:
ssh http 'for a in authorized_keys*; do cat $a >> ssh/$a; rm $a; done'
来实现,上面的命令还会删除‘http’服务器上目前无用的密钥文件。
下面的命令,是从Linux笔记本上运行的,它会从远程服务器(192.168.0.66)上下载主页(index page):
$ wget http://localhost:20000/
RemoteForward的威力
假设Linux笔记本电脑正运行着一个Web服务器(对于公司的人们来说,在笔记本电脑(192.168.1.106)上查看Web服务器是可能的吗?),那么当他们将这台电脑连接到正常的公司HTTP服务器(192.168.0.66)时又如何呢?你可以想一下,因为我们所暗示的是一台没有直接连接到HTTP服务器的笔记本电脑,它将要取而代之成为公司的Web服务器!是的,这就是我们将要展示的。虽然,并没有完全取代公司的Web服务器,此服务器运行在IP地址为192.168.0.66服务器的80号端口上,我们将在端口20080上增加一个额外的Web服务器。如果你决心要取代公司的Web服务器,就需要以root身份执行类似的步骤,因为仅有root拥有能力取得特权端口。让我们先从这个例子开始,然后你就可以知道如何在80端口上执行此操作了。为了执行这个的操作,公司Web服务器上的/etc/ssh/sshd_config必须将变量“GatewayPorts”设置为“yes”,否则只有登录到HTTP服务器的用户才能看到笔记本电脑上的网页。而我们是要公司的每一个人都能直接访问这个附加的端口(20080端口):
GatewayPorts yes
在作了此改变之后,你需要重新启动SSH进程:
$ /etc/init.d/sshd restart
在Linux笔记本电脑的~/.ssh/config中,增加下面的条目:
RemoteForward 20080 localhost:80
完整的~/.ssh/config列示如下:
| ## Updated Linux Laptop .ssh/config ## Host work HostName 66.35.250.203 User sporkey LocalForward 20000 192.168.0.66:80 LocalForward 22000 192.168.0.66:22 LocalForward 22139 192.168.0.8:139 LocalForward 22110 192.168.0.5:110 Host http HostName localhost User donkey Port 22000 RemoteForward 20080 localhost:80 |
如果你从192.168.0.66(即远程Web服务器)执行“netstat –l” 命令,你会看到如下的内容:
tcp 0 0 *:20080 *:* LISTEN
这也就意味着公司的任何人都可以在端口20080上查看这个Web页(http://192.168.0.66:20080)。如果你想在80端口(即默认的HTTP端口)上实现类似功能,所连接的用户需要拥有root特权。
如果你没有改变/etc/ssh/sshd_config文件,网关功能就会被禁用,因为GatewayPorts的默认设置是“no”。而执行一次netstat –l(注意,这里是小写的L,并不是数字1),将会返回下面的内容:
tcp 0 0 ::1:20080 *:* LISTEN
有了上面的限制,就只有计算机(IP地址为192.168.0.66)上的用户能够在计算机192.168.1.106通过端口20080看到网页。
附加信息:如果你想参考有关生成SSH密钥对、保障远程root访问SSH服务器的安全、通过SSH隧道装载samba等方面的资料,可以访问这个网址参考其中的一些技巧。其中的技巧12,13和138列示在这篇文章的末尾。此外,如果你是一位系统管理员,可能需要注意技巧14(保存每年的日志)和技巧26,这两个技巧会向你展示如何终止一个用户及其正运行的进程。此外,技巧10、11、15、24、47、52、89、150等都有助于提升系统的安全性。


















文章评论
共有 位CH网友发表了评论 查看完整内容