kle*_*lew 16 linux ssh ssh-tunnel forwarding
我在路由器后面有一台无法配置的 Ubuntu 计算机。但是我想通过 ssh 访问那台计算机。我认为 ssh 隧道是可能的,但我不知道该怎么做。我有另一台服务器,我想设置隧道。怎么做?或者也许您有其他想法如何解决这个问题?
我试过:
ssh -N user@my_server -L 22/localhost/8090
Run Code Online (Sandbox Code Playgroud)
但它说:
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.
Run Code Online (Sandbox Code Playgroud)
Dav*_*ett 20
您要求它侦听本地端口 22 并将连接转发到远程系统的端口 8090。您不能这样做,因为本地端口 22 已被本地 SSH 服务器占用。
我认为您正在寻找的是远程转发。替换-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
Run Code Online (Sandbox Code Playgroud)
此外,如果您和服务器之间的一个网络跃点在任何时候出现故障,尽管您指定了任何 KeepAlive 选项,连接仍将断开,因此您可能需要将此命令添加到 inittab,或查看 daemontools 包或您的发行版等效,以便它始终在启动时启动,并在由于系统关闭以外的某种原因退出时重新启动(或者您可以从无限循环的 shell 脚本运行它,但 init 或 daemontools 是更干净的解决方案)。
您不能这样做的原因是因为您试图将本地计算机上的端口 22 转发到远程服务器上的端口 8090,并且某些内容已经在本地服务器上的端口 22 上运行。很可能你有一个 SSH 服务器正在运行。您可以通过将 22 更改为不同的值来解决此问题。您可以通过运行以下命令来检查端口是否空闲:
# netstat -lep --tcp
Run Code Online (Sandbox Code Playgroud)
这列出了所有侦听套接字,因此如果未列出端口,则它是免费的。