如何设置SSH隧道转发SSH?


13

我有一台无法配置路由器的Ubuntu电脑。但是我想通过ssh访问该计算机。我认为ssh隧道技术是可行的,但我不知道该怎么做。我有另一台服务器想要设置隧道。怎么做?或者,也许您还有其他解决办法?

我试过了:

ssh -N user@my_server -L 22/localhost/8090

但它说:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

Answers:


18

您要它侦听本地端口22并将连接转发到远程系统的端口8090。您不能这样做,因为本地SSH服务器已经使用了本地端口22。

我认为您正在寻找的是远程转发。替换-L 22:localhost:8090-R 8090:localhost:22会告诉远程主机侦听端口8090并将请求转发到SSH服务器。

如果您要保持连接的运行状态,以便以后可以从远程站点进入,那么您将要通过添加相关选项(-o TCPKeepAlive=yes-o ServerAliveInterval=30)来确保连接不会由于不活动而超时。

因此,您将得到类似以下内容的结果:

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

另外,如果您和服务器之间的网络跳线之一在任何时候都断开了,尽管您指定了任何KeepAlive选项,连接也会断开,因此您可能希望将此命令添加到inittab中,或者查看daemontools软件包或发行版的等价的,因此它总是在启动时启动,并在由于某种原因退出时重新启动,然后系统关闭(或者您可以从无限循环的shell脚本中运行它,但init或daemontools是更干净的解决方案)。


它几乎可以工作。我可以连接到我的计算机,但只有在登录服务器后才能这样做。我想从任何地方通过该端口进行连接。
klew

3
如果将服务器的公共地址或通配符添加到端口转发定义(-R 111.222.333.444:8090:localhost:22或-R *:8090:localhost:22),则可能会起作用,尽管这种事情可以在服务器上禁用。如果服务器是您控制的服务器,请确保在sshd_config中启用了GatewayPorts选项。
David Spillett

我写了一个脚本来帮助我进行ssh隧道传输,您可以在以下网址
Nam Nguyen

添加GatewayPorts Yes到我的sshd_config帮助我向公众开放了该端口。
亚当F

8

无法执行此操作的原因是,您正在尝试将本地计算机上的端口22转发到远程服务器上的端口8090,并且本地服务器上的端口22已经在运行某些内容。很可能您正在运行SSH服务器。您可以通过将22更改为其他值来解决此问题。您可以通过运行以下命令来查看端口是否空闲:

# netstat -lep --tcp

它列出了所有侦听套接字,因此,如果未列出端口,则该端口是免费的。


3

我正在使用lsof -i:PortNumber命令来检查端口是否空闲:

# lsof -i :2272

如果端口是空闲的,您将在输出中看不到任何内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.