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