如何设置 ssh 隧道来转发 ssh?

如何设置 ssh 隧道来转发 ssh?

我有一台装有 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.

答案1

您要求它监听您的本地端口 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

此外,如果您和服务器之间的网络跳数之一在任何时候发生故障,那么无论您指定了什么 KeepAlive 选项,连接都会断开,因此您可能需要将此命令添加到 inittab,或者查看 daemontools 包或您的发行版的等效包,以便它始终在启动时启动,并在由于系统关闭以外的某种原因退出时重新启动(或者您可以从无限循环的 shell 脚本运行它,但 init 或 daemontools 是更简洁的解决方案)。

答案2

您无法执行此操作的原因是您尝试将本地计算机上的端口 22 转发到远程服务器上的端口 8090,而本地服务器上的端口 22 上已在运行某些程序。很可能您正在运行 SSH 服务器。您可以通过将 22 更改为其他值来修复此问题。您可以通过运行以下命令检查端口是否可用:

# netstat -lep --tcp

这列出了所有监听套接字,因此如果没有列出该端口,那么它是空闲的。

答案3

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

# lsof -i :2272

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

答案4

我遇到了同样的问题,然后我跑了

$ ps aux |删除 SSH

我发现它sshd正在后台运行,所以我终止了该进程,我只想ssh进入另一台机器,而不是在我的计算机上

$ sudo 服务 sshd 停止

相关内容