我在路由器后面有一台装有 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.
您要求它在本地端口 22 上侦听并将连接转发到远程系统的端口 8090。您不能这样做,因为您的本地端口 22 已经被本地 SSH 服务器占用。
我认为您正在寻找的是远程转发。替换
-L 22:localhost:8090
为-R 8090:localhost:22
将告诉远程主机侦听端口 8090 并将请求转发到您的 SSH 服务器。-o TCPKeepAlive=yes
如果您让连接保持运行以便稍后可以从远程站点进入,那么您将需要通过添加相关选项(或-o ServerAliveInterval=30
)来确保连接不会由于不活动而超时所以你最终会得到类似的东西:
此外,如果您和服务器之间的一个网络跃点在任何时候发生故障,尽管您指定了任何 KeepAlive 选项,连接都会断开,因此您可能需要将此命令添加到 inittab,或者查看 daemontools 包或您的发行版等效,因此它始终在启动时启动,并在由于某种原因退出时重新启动,而不是系统关闭(或者您可以从无限循环的 shell 脚本运行它,但 init 或 daemontools 是更干净的解决方案)。
无法执行此操作的原因是您试图将本地计算机上的端口 22 转发到远程服务器上的端口 8090,而本地服务器上的端口 22 上已经运行了一些东西。您很可能正在运行 SSH 服务器。您可以通过将 22 更改为不同的值来解决此问题。您可以通过运行以下命令检查端口是否空闲:
这列出了所有侦听套接字,因此如果未列出端口,则它是免费的。
我正在使用 lsof -i :PortNumber 命令检查端口是否空闲:
如果端口是空闲的,您将在输出中看不到任何内容。
我遇到了同样的问题,我跑了
我发现它
sshd
在后台工作,所以我终止了进程,我只想ssh
进入另一台机器,而不是在我的机器上