扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
OpenSSH 和 Linux
从Linux笔记本电脑(我们假定其IP地址为192.168.1.106)上 ,我们就可以直接访问防火墙后的资源,包括Samba 服务器、 Web 服务器,甚至由防火墙对外锁定的邮件服务器。防火墙仅允许通过22号端口对SSH服务器的访问,不过笔记本电脑仍然可以访问其它的服务器:
## 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 |
这个文件必须恰当地设置其权利:
$ chmod 600 ~/.ssh/config
可以看一下上面的文件。注意到条目“LocalForward 22000 192.168.0.66:22”,并将其与网络图表相对比。到SSH服务器的连接是通过从Linux笔记本电脑上运行下面的命令实现的:
$ ssh -l sporkey 66.35.250.203
小提示:上面的命令可以被缩写,因为用户名“sporkey”和“主机名”已经在配置文件中指定了。因此,你可用下面显示的“SSH work”:
$ ssh work
在完成这个连接之后,就有可能直接访问HTTP服务器,假定账户“donkey”可以访问这个服务器。下面的命令是在Linux笔记本电脑(192.168.1.106)上执行的。是的,那是一个处于新窗口中的Linux笔记本电脑。此外,这是在IP地址为192.168.1.106的主机中的一个新的会话中执行的。因此,请注意这儿的Linux笔记本电脑可以直接访问192.168.0.66。请注意,这儿的SSH会话起始于Linux笔记本电脑。
$ ssh -l donkey localhost -p 22000
因为配置文件将“HTTP”映射到localhost 端口2200上,所以上面的命令可以简写如下:
$ ssh http
不过,别急。有一个更好的方法。其实,我们不用创建两个终端会话,一个用于ssh work,另外一个用于ssh http,我们为什么不能将其用在一个命令中呢:
$ ssh -N -f -q work; ssh http
上面的命令将建立连接,从所需的端口转发到其它的服务器。“-N”表示“不要执行远程命令”,而“-f”要求ssh转到后台,“-q”是禁止所有的警告和诊断信息。那么这对你来说是不是还太繁琐?那就创建一个别名(alias)吧:
alias http=‘ssh -N -f -q work; ssh http’,并将其放置到~.bashrc文件中,这样就可以使它尽可能地简短,因为在命令行键入http将使你达到HTTP服务器。
要将文件复制到这个服务器,就要使用下面的命令(注意:scp之后的大写P)。如果你在.ssh目录中,你就会看到一个授权的authorized_keys2或者是一个授权的authorized_keys,你可能想要将其追加到目标服务器的类似文件上。这些文件仅仅作为一个示例而列示。可以复制任何文件,不过如果你将这些文件复制到远程服务器上,并将内容追加到远程服务器的authorized_key*文件,那么在下次你建立连接时,就不会被提示要求口令。
$ 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等都有助于提升系统的安全性。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者