如何设置SSH隧道转发ssh?

我有电脑与Ubuntu后面的路由器,我不能configuration。 不过,我想有SSH访问该计算机。 我认为这是可能的SSH隧道,但我不知道该怎么做。 我有另一台服务器,我想build立隧道。 怎么做? 或者,也许你有其他的想法如何解决这个问题?

我试过了:

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. 

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

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

    如果您要让连接继续运行,以便稍后可以从远程站点获取,则需要通过添加相关选项( -o TCPKeepAlive=yes或更高版本)来确保连接不会因为处于非活动状态而-o TCPKeepAlive=yes -o ServerAliveInterval=30

    所以你最终会得到像这样的东西:

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

    此外,如果您和服务器之间的networking中断之一在任何时候都处于closures状态,那么即使您指定了KeepAlive选项,连接也会丢失,因此您可能希望将此命令添加到inittab,或者查看daemontools软件包或您的发行版等等,这样它总是在启动时启动,并在出于某种原因而退出时重新启动,除非系统closures(或者可以从无限循环的shell脚本运行它,但是init或daemontools是更干净的解决scheme)。

    您不能这样做的原因是因为您试图将本地计算机上的端口22转发到远程服务器上的端口8090,而某些已经在本地服务器上的端口22上运行。 很可能你有一个SSH服务器运行。 您可以通过将22更改为不同的值来解决此问题。 您可以通过运行来检查端口是否空闲:

     # netstat -lep --tcp 

    这列出了所有的侦听套接字,所以如果端口没有列出,那么它是免费的。

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

     # lsof -i :2272 

    如果端口是空闲的,你将看不到任何输出。