在Linux CLI上创建SSH隧道的简单方法

时间:2020-02-23 14:30:22  来源:igfitidea点击:

在这篇文章中,将介绍如何轻松创建一个SSH隧道到远程服务器。
我了解到,针对SSH隧道的一个大敲击是创建它们,所涉及的命令的复杂性,并且围绕本主题的文档较少。
对于最终用户来说,它可能很难掌握SSH命令,但我的SSH命令作战书可以使用SSH加速。

Mole介绍

我们将用于在Linux上创建SSH隧道的工具是mole。
mole是CLI应用程序来创建SSH隧道,通过SSH服务器将本地端口转发到远程端点。

Mole可访问防火墙阻止的计算机和服务,只要用户对具有访问目标计算机或者服务的计算机的计算机访问权限即可。

+----------+          +----------+          +----------+
|          |          |          |          |          |
|          |          | Firewall |          |          |
|          |          |          |          |          |
|  Local   |  tunnel  +----------+  tunnel  |          |
| Computer |--------------------------------|  Server  |
|          |          +----------+          |          |
|          |          |          |          |          |
|          |          | Firewall |          |          |
|          |          |          |          |          |
+----------+          +----------+          +----------+
                                                 |
                                                 |
                                                 | tunnel
                                                 |
                                                 |
                                            +----------+
                                            |          |
                                            |          |
                                            |          |
                                            |          |
                                            |  Remote  |
                                            | Computer |
                                            |          |
                                            |          |
                                            |          |
                                            +----------+

使用MOLE,我们还可以访问仅在端口转发的帮助下侦听本地地址的服务。
了解如何使用Firewalld在CentOS 7上创建端口转发。

另请注意 Server and Remote电脑可能是相同的机器。

+-------------------+             +--------------------+
| Local Computer    |             | Remote/Server    |
|                   |             |                    |
|                   |             |                    |
| (172.17.0.10:     |    tunnel   |                    |
|        50001)     |-------------| (172.17.0.100:22)  |
|  tunnel client    |             |  tunnel server     |
|       |           |             |         |          |
|       | port      |             |         | port     |
|       | forward   |             |         | forward  |
|       |           |             |         |          |
| (127.0.0.1:3306)  |             | (127.0.0.1:50000)  |
|  local address    |             |         |          |
|                   |             |         | local    |
|                   |             |         | conn.    |
|                   |             |         |          |
|                   |             | (127.0.0.1:3306)   |
|                   |             |  remote address    |
|                   |             |      +----+        |
|                   |             |      | DB |        |
|                   |             |      +----+        |
+-------------------+             +--------------------+

突出的Mole特征

自动本地地址选择:查找可用的端口并开始收听它,因此标志 -local每次运行app.aliases时都不需要给予:在别名下保存隧道设置,因此可以重复使用.Leverage SSH配置文件:使用某些选项(例如用户名,Identity键和端口) ,指定的 $HOME/.ssh/config只要有可能,在多个位置都没有必要具有相同的SSH服务器配置。

如何在Linux/MacOS上安装mole

在Linux上安装mole是通过可以下载的安装脚本 curl

curl -O https://raw.githubusercontent.com/davrodpin/mole/master/tools/install.sh

下载脚本后,将其执行可执行,然后安装

chmod +x install.sh
./install.sh

此脚本将安装mole, /usr/local/bin但它需要管理员权限才能部署文件。
它可能要求我们输入sudo密码。

我们可以使用命令确认文件位置和版本:

$which mole
/usr/local/bin/mole
$mole --version
mole 0.2.0

要查看帮助页面,请使用 --help选项

$mole –help
usage:
  mole [-v] [-local []:] -remote []: -server [@][:] [-key ]
  mole -alias  [-v] [-local []:] -remote []: -server [@][:] [-key ]
  mole -alias  -delete
  mole -start 
  mole -help
  mole -version
	
  -alias string
    	Create a tunnel alias
  -delete
    	delete a tunnel alias (must be used with -alias)
  -help
    	list all options available
  -key string
    	(optional) Set server authentication key file path
  -local value
    	(optional) Set local endpoint address: []:
  -remote value
    	set remote endpoing address: []:
  -server value
    	set server address: [@][:]
  -start string
    	Start a tunnel using a given alias
  -v	(optional) Increase log verbosity
  -version
    	display the mole version

如何使用Mole创建SSH隧道

让我们看一些关于如何使用Mole创建SSH隧道的示例

示例1:提供所有支持的选项

使用以下详细信息创建隧道:在LocalHost端口8080上与别名 tunnel1到服务器IP 192.168.18.50:80:80REMOTE SSH用户是VAGRANT,SSH服务器使用的是192.168.18.51:22身份验证方法是公共/私有SSH keysssh公共关键位置 ~/.ssh/test_rsa.pubSSH私钥 ~/.ssh/test_rsa我们需要将公共SSH键复制到用于隧道的远程SSH服务器

$ssh-copy-id -i ~/.ssh/test_rsa.pub Hyman@theitroad

通过向服务器执行SSH导入远程SSH服务器指纹

$ssh -i ~/.ssh/test_rsa.pub Hyman@theitroad

现在创建隧道:

$mole -alias tunnel1 -v -local 127.0.0.1:8080 \
-remote 192.168.18.50:80 \
-server Hyman@theitroad \
-key ~/.ssh/test_rsa

启动隧道,使用

$mole -start tunnel1

示例输出

$ mole -start tunnel1

DEBU[0000] cli options                                   options="[local=127.0.0.1:8080, remote=192.168.18.50:80, [email protected], key=/home/jmutai/.ssh/test_rsa, verbose=true, help=false, version=false]"
DEBU[0000] server: [name=192.168.18.51, address=192.168.18.51:22, user=vagrant, key=/home/jmutai/.ssh/test_rsa] 
DEBU[0000] tunnel: [local:127.0.0.1:8080, server:192.168.18.51:22, remote:192.168.18.50:80] 
INFO[0000] listening on local address                    local_address="127.0.0.1:8080"
DEBU[0017] new connection                                address="127.0.0.1:36908"
DEBU[0017] known_hosts file used: /root/.ssh/known_hosts 
DEBU[0019] new connection established to server          server="[name=192.168.18.51, address=192.168.18.51:22, user=vagrant, key=/home/jmutai/.ssh/test_rsa]"
DEBU[0024] new connection established to remote          remote="192.168.18.50:80" server="[name=192.168.18.51, address=192.168.18.51:22, user=vagrant, key=/home/jmutai/.ssh/test_rsa]"
DEBU[0024] new connection                                address="127.0.0.1:36910"
DEBU[0024] known_hosts file used: /root/.ssh/known_hosts 
DEBU[0026] new connection established to server          server="[name=192.168.18.51, address=192.168.18.51:22, user=vagrant, key=/home/jmutai/.ssh/test_rsa]"
DEBU[0029] new connection established to remote          remote="192.168.18.50:80" server="[name=192.168.18.51, address=192.168.18.51:22, user=vagrant, key=/home/jmutai/.ssh/test_rsa]"

示例2:使用SSH配置文件查找给定的服务器主机

我们可以为远程SSH服务器添加SSH配置 ~/.ssh/config,然后在运行mole时调用它的名字。

$cat .ssh/config
Host rserver1
  Hostname 192.168.18.51
  User vagrant
  Port 22
  IdentityFile ~/.ssh/test_rsa

然后创建一个隧道

$mole -alias tunnel1 -v -local 127.0.0.1:8080 \
-remote  192.168.18.50:80 \
-server rserver1

我们也可以使用:8080而不是127.0.0.1:8080

$mole -alias tunnel1 -v -local :8080 \
-remote 192.168.18.50:80 \
-server rserver1
$mole -start tunnel1

远程服务器端口也相同

$mole -alias tunnel1 -v -local 127.0.0.1:8080 \
-remote :80 \
-server rserver1

示例3:让Mole随机选择本地端点

我们应该注意到我们指定了本地端口 8080用于使用选项隧道流量 -local 127.0.0.1:8080
Mole可以随机选择未使用的TCP端口。

为此,示例2将改变为

$mole -alias tunnel1 -remote 192.168.18.50:80 -server rserver1
$mole -start tunnel1

从将进入的本地地址将被打印出来

INFO listening on local address local_address="127.0.0.1:36683"

确认我们可以使用隧道访问远程服务器上的Web服务器。

要删除SSH隧道,请运行:

$mole -delete -alias tunnel1