相关疑难解决方法(0)

反向 SSH 隧道如何工作?

据我了解,防火墙(假设默认设置)拒绝所有没有先前对应的传出流量的传入流量。

基于Reversing an ssh connectionSSH Tunneling Made Easy,反向 SSH 隧道可用于绕过烦人的防火墙限制。

我想在远程机器上执行 shell 命令。远程机器有自己的防火墙,并在附加防火墙(路由器)后面。它有一个像 192.168.1.126(或类似的东西)这样的 IP 地址。我不在防火墙后面,我知道从 Internet 上看到的远程机器的 IP 地址(不是 192.168.1.126 地址)。此外,我可以要求某人ssh (something)首先在远程机器上以 root身份执行。

谁能一步一步地向我解释反向 SSH 隧道如何绕过防火墙(本地和远程机器的防火墙以及它们之间的附加防火墙)?

开关 ( -R, -f, -L, -N)的作用是什么?

networking ssh firewall remote-management ssh-tunneling

432
推荐指数
4
解决办法
30万
查看次数

创建反向隧道的永久后台 ssh 连接:正确的方法是什么?

相关问题:启动服务器到客户端的ssh连接

那里的回答对我帮助很大,这个命令可以满足我的需求:

ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
Run Code Online (Sandbox Code Playgroud)

所以我写了脚本来一直重新连接:

 #!/bin/bash

 while true; do
    echo "try to connect..."
    ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
    echo "restarting in 5 seconds.."
    sleep 5
 done
Run Code Online (Sandbox Code Playgroud)

并将其添加到/etc/crontab. 但是我发现如果我只从 shell 中“手动”执行它,它就可以工作,但是如果它被 cron 调用,ssh 会连接并立即完成。(所以,上面的脚本一直重新连接)

man ssh,我发现对于后台连接,我应该用-n密钥调用它,但它没有帮助。然后,我只是环顾四周寻找类似的脚本,我发现如果我调用它就可以工作tail -f something,即一些“永无止境”的命令,所以我刚刚创建了一个空文件/tmp/dummy_file,现在我的 ssh 命令如下所示:

ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
Run Code Online (Sandbox Code Playgroud)

它现在有效!但是,这个解决方案似乎有点难看,而且我真的不明白这种行为的实际原因。碰巧,我试图调用bash而不是tail -fbash在我看来也是“永无止境”的命令),但它不起作用。

那么,任何人都可以解释这种行为,以及创建后台 ssh 连接以保持反向 ssh 隧道的正确方法是什么?

ssh background-process

49
推荐指数
3
解决办法
6万
查看次数