SSH除了远程连接还可以在命令行中做端口转发和反向远程端口转发

B站影视 2024-10-26 21:52 2

摘要:通过远程连接的管理工具利用开启隧道的形式转发端口的做法,现在大家或多或少都用过吧。但是直接在命令行使用SSH添加-L或者-R的方式来进行代理或者反向代理转发,又有多少人试过呢?

通过远程连接的管理工具利用开启隧道的形式转发端口的做法,现在大家或多或少都用过吧。但是直接在命令行使用SSH添加-L或者-R的方式来进行代理或者反向代理转发,又有多少人试过呢?

ssh -L 和 ssh -R 是 SSH(Secure Shell)命令的两个参数,它们用于设置端口转发。端口转发允许您通过一个安全的 SSH 连接将一个端口从一个网络转发到另一个网络。

下面通过假设下面的一个架构,来模拟演示如何不用图形软件仅在命令行中创建隧道转发端口。

-L 参数用于创建一个从本地机器到远程机器的端口转发。这种类型的转发通常用于将远程服务器上的服务转发到本地机器,以便可以安全地访问它。

语法

ssh -L 本地端口:远程地址:远程端口 用户名@远程主机本地端口:在本地机器上监听的端口。远程地址:远程机器的地址,可以是远程机器本机的 localhost或者远程机器可以访问到的其他机器的IP。远程端口:远程机器上的端口,您想要从本地访问的服务的端口。

例一: 假设您想要从本地机器安全地访问远程服务器上的 MySQL 数据库服务器,该服务器运行在远程服务器的 3306 端口上。

ssh -L 3306:localhost:3306 用户名@远程主机

这个命令会在本地机器上监听 3306 端口,并将其转发到远程主机的 3306 端口。然后,您可以在本地机器上使用 MySQL 客户端连接到 localhost:3306,实际上您连接的是远程服务器上的 MySQL 服务。

具体的运行效果:

假设mysql服务器在虚拟局域网中的IP为10.147.17.253

sean@MacBook-Pro ~ % ssh -L 3306:localhost:3306 root@10.147.17.253The authenticity of host '10.147.17.253 (10.147.17.253)' can't be established.ED25519 key fingerprint is SHA256:O/lqToPCh+PXli4FJkjumWlnltaq5UHmsLeKFhS8QgE.This key is not known by any other names.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added '10.147.17.253' (ED25519) to the list of known hosts.root@10.147.17.253's password:Last login: Wed Oct 2 10:41:06 2024 from 10.147.17.211[root@databases ~]#

ssh连接成功后,就可以在本地通过映射的端口进行访问了

例二: 上面的例子中算了一个了解ssh转发的入门及例子。因为你都可以直接访问到数据库所在的服务器了,那么为什么不直接就访问器端口呢?

现在咱们让网络环境进一步的复杂化,如果现在虚拟局域IP为10.147.17.224的服务器不是mysql的服务器,而是一台跳板机,数据库是在跳板机同一网络中为192.168.1.98。要连接到数据库的命令就变成了这样:

sean@MacBook-Pro ~ % ssh -L 3306:192.168.1.98:3306 root@10.147.17.224root@10.147.17.224's password:Last login: Wed Oct 2 11:24:38 2024 from 10.147.17.211

如此也就可以在没有其他远程连接软件配置隧道的情况下,通过命令行打开SSH的端口转发,访问到跳板机内的其他服务。

-R 参数与 -L 类似,但它是用于创建从远程机器到本地机器的端口转发。这种类型的转发通常用于让远程服务器能够访问本地机器上的服务。

语法

ssh -R 远程端口:远程地址:本地端口 用户名@远程主机远程端口:在远程机器上监听的端口。远程地址:远程机器的地址(通常是 localhost)。本地端口:本地机器上的端口,您想要从远程服务器访问的服务的端口。

例子: 假设您想要从远程服务器访问本地机器上的 Web 服务器,该服务器运行在本地机器的 8880 端口上。

ssh -R 8880:localhost:8880 用户名@远程主机

这个命令会在远程机器上监听 8880 端口,并将其转发到本地机器的 8880 端口。然后,您可以在远程服务器上访问 localhost:8880,实际上您访问的是本地机器上的 Web 服务。

为了演示这个例子,咱们先在本地拉取一个nginx的镜像,然后将其映射到本地的8880端口,

sean@MacBook-Pro ~ % docker pull nginx:alpinealpine: Pulling from library/nginx43c4264eed91: Pull complete5b19511a843d: Pull complete652d69a25e85: Pull complete51676974aef5: Pull completebb16f69e8876: Pull complete6fb07faa0055: Pull completec298c5a0cd21: Pull complete0c02f601d0ee: Pull completeDigest: sha256:a5127daff3d6f4606be3100a252419bfa84fd6ee5cd74d0feaca1a5068f97dcfStatus: Downloaded newer image for nginx:alpinedocker.io/library/nginx:alpineWhat's Next?View a summary of image vulnerabilities and recommendations → docker scout quickview nginx:alpinesean@MacBook-Pro ~ % docker run -d -p 8880:80 --name demoweb nginx:alpineb5065e9215161ff292c4e321ccb05df9518bf8a393d165d87e42eaf8480cd659sean@MacBook-Pro ~ %

远程登录后成功后,远程即可通过其本地端口进行访问了

sean@MacBook-Pro ~ % ssh -R 8880:localhost:8880 root@10.147.17.224root@10.147.17.224's password:Last login: Wed Oct 2 11:26:50 2024 from 10.147.17.211[root@desktop-centos ~]# curl localhost:8880Welcome to nginx!html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }

Welcome to nginx!

If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.

For online documentation and support please refer tonginx.org.
Commercial support is available atnginx.com.

Thank you for using nginx.

端口转发是 SSH 的强大功能之一,它可以帮助您安全地访问位于不同网络中的服务。

如果您对我的文章有兴趣,我把我发布的文章都归档到我私人网站中去,欢迎访问 Corner 三的小角落 -- 首页 查阅之前的文章。

来源:战士使命途

相关推荐