≡菜单

如何在Linux上设置反向SSH隧道

反向SSH是一种可用于从外部访问系统(位于防火墙后面)的技术。

如您所知,SSH是一种网络协议,支持网络节点之间的加密通信。使用此协议,您可以进行安全的远程登录,与远程计算机之间的安全复制等。

您’通常,使用以下方法执行以下操作以安全地连接到远程服务器: ssh命令.

$ ssh [your-account-login]@[server-ip]

什么是反向SSH?

SSH是安全访问远程计算机或服务器的非常好的工具。但是,当您尝试连接到位于防火墙后面的远程服务器时,就会出现问题,并且此防火墙会拒绝任何没有先前传出请求的传入连接或数据传输请求。这意味着仅允许由远程服务器计算机启动的那些连接。对于那些想远程访问此服务器的人来说,这是一个真正的问题。

反向SSH提供了一种可以模拟到此远程服务器计算机的普通SSH的技术。

主要问题是防火墙拒绝了您的计算机试图与远程服务器计算机建立的ssh连接。但是您知道,同一防火墙对来自服务器计算机的连接不会有任何问题。因此,为什么不要求坐在防火墙后面的某个人执行某些操作,以实现远程访问服务器的目标。为此,我们必须使用ssh -R选项。

这是手册页中ssh -R选项的描述:

-R [bind_address:] port:host:hostport

指定要将远程(服务器)主机上的给定端口转发到本地的给定主机和端口。这是通过分配一个套接字来侦听远程端的端口来实现的,只要对此端口建立连接,该连接就会通过安全通道转发,并从本地计算机建立到主机端口hostport的连接。

因此,您可以使用带有-R选项的ssh命令(在本例中是从服务器)连接到您的计算机,在该计算机上分配端口,并确保该端口上的所有连接请求都转发到远程服务器的ssh端口。

服务器计算机执行ssh,而不是您的计算机执行ssh,并且通过端口转发确保您可以ssh返回服务器计算机。

如何创建反向SSH隧道?

这是您的坐在远程服务器端的朋友应该在服务器上运行的命令:

ssh -fN -R 7000:localhost:22 用户名@yourMachine-ipaddress

因此,此从远程服务器到您的计算机的ssh连接请求将确保对您计算机上的端口7000的任何ssh连接请求都转发到远程服务器的端口22。

现在,从您的计算机到端口7000上的您自己的计算机执行ssh连接请求:

ssh 用户名@localhost -p 7000

在这里,尽管似乎您正在localhost上执行ssh,但是您的请求将转发到远程主机。因此,您应该使用自己的帐户‘username’在远程服务器上,当提示您输入密码时,输入相应的密码。

这应该清除与反向ssh技术有关的大多数方面。但是,有一个陷阱。要注意的是,你必须问一个你的朋友—谁坐在防火墙后面—首先创建一个ssh连接。每次都不可行。

为了克服这个问题,您可以做的是设置一台始终处于打开状态的不在防火墙内的计算机(就像您的计算机一样)。让我们将此机器称为machine_z。

machine_z的好处在于,您可以一次在它上面进行反向ssh设置,并像这样保留它。在任何时候,当您需要登录到远程计算机时,都可以在指定的端口ssh进入machine_z(如前所示),并且连接请求将转发到远程服务器计算机和Voila,您将在远程计算机上运行命令服务器。

在相关说明中,您还可以设置 没有密码SSH 无需输入密码即可连接到另一台服务器。

您需要在machine_z上配置的一些设置包括:

  • 确保将参数TCPKeepAlive,ClientAliveInterval,ClientAliveCountMax和GatewayPorts设置为适当的值。这些参数位于/ etc / sshd_config或 / etc / ssh / sshd_config 文件
  • 如果对上述参数进行了一些更改,则应重新启动sshd守护程序以反映所做的更改。
  • 另外,请确保使用以下命令运行第一个ssh命令(从远程服务器到machine_z执行) nohup命令 这样,此ssh会话就不会受到用户退出时可能发生的挂断的影响。

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 8 评论… 加一 }

  • 贾拉尔·哈吉霍拉玛利 2013年11月27日,上午1:55

    你好
    谢谢你的好文章…

  • 伊森 2013年11月27日,上午4:27

    非常清楚。

  • af 2013年11月27日,上午11:01

    如果我每次连接时都使用带有动态IP的PPPoE连接。如何设置Web浏览的ssh隧道?还可以通过另一种方式保护我的数据吗?我用一根电线的路由器–互联网和手机和平板电脑的wifi。这样可以保护我吗?

  • 鲍勃 2013年11月27日,下午12:48

    我一直在想这个。这篇文章消除了我的很多疑问。谢谢!!!

  • 老虎节 2013年11月28日,晚上10:43

    @catafest

    互联网->your router->您的防火墙(基于硬件)->您的PC(经过强化,已应用最新的操作系统补丁,已安装个人防火墙 &防病毒{每天更新})。

  • 林沙德 2013年12月22日,上午11:31

    你好
    有用的..

  • 花花公子 2015年6月8日,晚上8:18

    我一定做错了什么。一世’我试图建立一个持久的反向隧道,以便我可以进行远程shell访问。一世’m现在处于测试模式,看起来像我’我创建了隧道,当我尝试ssh到我的本地主机时,我最终得到了一个shell。… localhost.

    有什么方法可以测试我的缺失或做错了什么?

  • 哈桑 2015年10月13日,上午4:00

    好文章

发表评论