在Linux CLI上创建SSH隧道的简单方法
在这篇文章中,将介绍如何轻松创建一个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.pub
SSH私钥 ~/.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