ssh -L转发多个端口

Pas*_*ten 97 ssh port portforwarding

我目前正在运行一堆:

sudo ssh -L PORT:IP:PORT root@IP
Run Code Online (Sandbox Code Playgroud)

其中IP是安全机器的目标,PORT代表我转发的端口.

这是因为我使用了许多我没有这种转发无法访问的应用程序.执行此操作后,我可以访问localhost:PORT.

现在出现的主要问题是我实际上有4个这样的端口我必须转发.

我的解决方案是打开4个shell并不断向后搜索我的历史记录以查找需要转发的确切端口等,然后运行此命令 - 每个shell中一个(必须填写密码等).

如果我能做的事情如下:

sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 root@IP
Run Code Online (Sandbox Code Playgroud)

那真的会有所帮助.

有没有办法让它更容易做到这一点?

NaN*_*NaN 156

-L在同一命令中再次使用该选项.每次都有不同的端口.

  • 起初我不明白这个答案。因此,在此处发布示例,以防有人遭受同样的痛苦。作者的意思是“ ssh -L port0:ip:port0 -L port1:ip:port1 ...” (4认同)
  • 当然,左侧的端口是本地端口,右侧的端口是远程端口。前任。ssh -L 本地端口0:IP:远程端口0 -L 本地端口1:IP:远程端口1 (3认同)

jbc*_*oko 76

正是NaN回答的问题,你指定了多个-L参数.我一直这样做.以下是多端口转发的示例:

ssh remote-host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22
Run Code Online (Sandbox Code Playgroud)

注意:这与 -L localhost:8822:REMOTE_IP_1:22您未指定的相同localhost.

现在有了这个,你现在可以(从另一个终端)做:

ssh localhost -p 8822
Run Code Online (Sandbox Code Playgroud)

连接到REMOTE_IP_1端口22

和类似的

ssh localhost -p 9922
Run Code Online (Sandbox Code Playgroud)

连接到REMOTE_IP_2端口22

当然,如果您有许多不同的主机/端口可以转发到某些特定的主机/端口,那么没有什么可以阻止您将其包装到脚本中或自动化它.

希望这可以帮助.

  • 请注意这一点:“注意:如果您不指定 localhost,这与 -L localhost:8822:REMOTE_IP_1:22 相同。” 仅当 GatewayPorts 设置为“no”时,这才是正确的,这无疑是默认设置。但考虑到如果不是的话,您应该验证设置,或者更好的是,明确并使用“-L localhost:8822...”。 (2认同)
  • 我同意@David`默认情况下,任何人(甚至在不同的计算机上)都可以连接到 SSH 客户端计算机上的指定端口。但是,可以通过提供绑定地址将其限制为同一主机上的程序: ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com` https://www.ssh.com/ ssh/隧道/示例 (2认同)

Raj*_*rma 30

对于通过同一主机转发多个端口的人可以在他们的~/.ssh/config 中设置类似的东西

Host all-port-forwards Hostname 10.122.0.3 User username LocalForward PORT_1 IP:PORT_1 LocalForward PORT_2 IP:PORT_2 LocalForward PORT_3 IP:PORT_3 LocalForward PORT_4 IP:PORT_4

它变得简单ssh all-port-forwards了。

  • (当然,为了完整起见,我刚才提到的示例是使用 -R 而不是 -L 选项,即 RemoteForward 而不是 LocalForward ) (2认同)

Yuv*_*mon 19

您可以使用以下bash函数(只需将其添加到您的~/.bashrc):

function pfwd {
  for i in ${@:2}
  do
    echo Forwarding port $i
    ssh -N -L $i:localhost:$i $1 &
  done  
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

pfwd hostname {6000..6009}
Run Code Online (Sandbox Code Playgroud)

  • 使用-f在后台运行 (2认同)
  • 嗯……你为什么要这样做? (2认同)

Tom*_*Tom 7

jbchichoko和yuval提供了可行的解决方案。但是jbchichoko的答案在功能上不是灵活的答案,并且yuval的答案打开的隧道无法关闭,ctrl+c因为它在后台运行。下面给出解决两个缺陷的解决方案:

~/.bashrc或中定义函数~/.zshrc

# fsshmap multiple ports
function fsshmap() {
  echo -n "-L 1$1:127.0.0.1:$1 " > $HOME/sh/sshports.txt
  for ((i=($1+1);i<$2;i++))
  do
    echo -n "-L 1$i:127.0.0.1:$i " >> $HOME/sh/sshports.txt
  done
  line=$(head -n 1 $HOME/sh/sshports.txt)
  cline="ssh "$3" "$line
  echo $cline
  eval $cline
}
Run Code Online (Sandbox Code Playgroud)

运行该函数的示例:

fsshmap 6000 6010 hostname
Run Code Online (Sandbox Code Playgroud)

该示例的结果:

您可以访问127.0.0.1:16000~16009hostname:6000~6009


Pin*_*ino 6

在我的公司中,我和我的团队成员都需要访问不可访问的“目标”服务器的 3 个端口,因此我创建了一个永久隧道(这是一个可以无限期在后台运行的隧道,请参阅参数-f-N)从可访问的服务器到目标之一。在我执行的可访问服务器的命令行上:

ssh root@reachableIP -f -N  -L *:8822:targetIP:22  -L *:9006:targetIP:9006  -L *:9100:targetIP:9100
Run Code Online (Sandbox Code Playgroud)

我使用过用户,root但您自己的用户可以使用。您必须输入所选用户的密码(即使您已经与该用户连接到可访问的服务器)。

现在,可达机器的端口 8822 对应于目标机器的 22 端口(用于 ssh/PuTTY/WinSCP),可达机器上的端口 9006 和 9100 对应于目标机器的相同端口(在我的情况下,它们托管两个 Web 服务)。


小智 5

我在 debian 上使用并运行的另一行代码:

ssh user@192.168.1.10 $(for j in $(seq 20000 1 20100 ) ; do  echo " -L$j:127.0.0.1:$j " ; done | tr -d "\n")
Run Code Online (Sandbox Code Playgroud)