当我通过 SSH 连接到设备时,我知道如何转发本地端口;首先使用 进入 ssh 菜单[ENTER} ~C
,然后:
-L 4455:ip:80
这将使本地计算机上的 localhost:4455 转到远程设备上的端口 80。
我怎样才能将此手动操作放入脚本中?这里唯一的变量是远程设备上的 IP 地址,但我知道如何自动获取它;我只是不知道如何将命令推送到 ssh 菜单,例如:-L 4455:ip:80
。
答案1
介绍
我最近遇到了这篇文章:https://hackertarget.com/ssh-examples-tunnels/它解释了很多关于 ssh 连接和端口转发的内容,看看,你会学到很多:)
以下是与您相关的内容:
SSH 隧道(端口转发)
最简单的 SSH 隧道只是在本地系统上打开一个端口,该端口连接到隧道另一端的另一个端口。
localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver
让我们分解一下 -L 参数。将 -L 视为本地监听方。因此,在上面的示例中,端口 9999 正在侦听 localhost,端口转发到远程服务器上的端口 80,请注意,127.0.0.1 指的是远程服务器上的 localhost!
让我们更进一步。在下面的示例中,正在侦听的端口可以从本地网络上的其他主机连接到。
localhost:~$ ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver
在这些示例中,我们连接的端口是侦听 Web 服务器。它还可以是代理服务器或任何其他 TCP 服务。
例子
现在,上面的内容将为您打开一个活动的 SSH shell,并且,因为我们只想转发端口,所以这是不需要的。您可以在命令中添加 -N 参数以跳过执行任何远程命令(打开的 shell 也是一个命令)。该ssh man
页面也解释了这一点:
-N Do not execute a remote command. This is useful for just forwarding ports.
因此,以下脚本将打开您的端口,直到您按 ctrl-c/kill 为止:
#!/usr/bin/env sh
echo "Forwarding ports"
ssh -N -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver
您还可以通过执行 sleep 命令并删除 -N 参数来打开端口几秒钟:
ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver "sleep 10"
最终的
这些 SSH 隧道有其缺陷。如果您想长时间保持转发端口打开,您可能需要查看以下线程,特别是有关以下内容的部分autossh
:https://superuser.com/questions/37738/how-to-reliously-keep-an-ssh-tunnel-open
答案2
我最近不得不做一些与您要求类似的事情,即有一个脚本可以使用 ssh 自动进行端口转发并在该地址打开浏览器。为了实现这一点,我将 ssh 命令的自动化行为与 shell 脚本结合起来。我使用 MacOS 作为说明。
在我的 ~/.ssh/config 文件中,我有一个条目,类似于:
Host remoteserver
HostName [ip address here]
User [username]
IdentityFile [path to secret.pem]
因此,如果您输入,ssh remoteserver
您就知道它会将您连接到那里。然后我在 PATH 中已有的目录中设置一个名为 on 的单独脚本,如下所示monitor
:chmod +x
#!/bin/bash
ssh -L 9999:localhost:80 $1 -N &
open -na Google\ Chrome --args --new-window "http://localhost:9999"
因此,当您键入时,monitor remoteserver
它会自动使用 ssh 建立端口转发,然后在适当的地址打开 Google Chrome 浏览器。
简单说明一下,$1
代表脚本文件名后面的参数。 -N
代表不需要远程服务器上的终端 shell。 &
代表非阻塞执行;如果您没有,打开浏览器窗口的下一个命令将等待您完成 SSH,这不是您想要的。 Open
是您通常在 MacOS 的 Darwin 中使用的内容,对于合适的 Linux 风格,您必须查找它,但这应该不会太难。 -na
代表组合新进程和应用程序标志,虽然--args --new-window
之前的 -n 标志似乎是多余的,但根据我的经验,似乎与 Chrome 配合得最好。
希望这可以帮助。