在启动时打开 SSH 反向隧道的 Bash 脚本

在启动时打开 SSH 反向隧道的 Bash 脚本

我正在尝试在 Debian Jessie 机器启动时运行一个脚本,其中包括创建一个 SSH 反向隧道。

问题是,我已将此脚本放在 中,if-up并将其放入rc.local启动器中。所有其他作业都运行正常,但当它必须创建 SSH 隧道时,它要么无法创建它,要么它会在作业正在运行消息上挂起启动。

我会更清楚,但问题是,如果我/etc/rc.local在机器启动后运行,隧道就会完美运行。

我必须补充一点,创建隧道的机器是 Raspberry Pi,有时我无法 ssh,直到我进行一些 ping。我管理脚本以便这样做,但在启动时没有成功。

正如你所看到的,我根本没有经验,只是在学习。

编辑:谢谢。正如我之前所说,如果我从控制台启动代码,代码运行完美。我给它完整的权限(777)给每个人,以防万一和测试。脚本已启用执行,但只有一个 chmod +x,也许还需要其他东西……这是代码。正如我所说,远程机器中的脚本要求提供私有和公共 IP 并将其放入 rpi 数据库中,之后他启动反向隧道(或不启动)从 /etc/rc.local 启动它,脚本存储在 /usr/local/games

#!/bin/bash
   wget -q --tries=10 --timeout=20 --spider http://google.com
   if [[ $? -eq 0 ]]; then

    publica=$(curl http://ipecho.net/plain)

    sleep 0.25s

    privada1= while IFS=$': \t' read -a line ;do

    [ -z "${line%inet}" ] && ip=${line[${#line[1]}>4?1:2]} &&
    [ "${ip#127.0.0.1}" ] && privada1=$ip

  done< <(LANG=C /sbin/ifconfig)


    fecha=$(date +%F_%X)


    sleep 0.15

    nombre=$(hostname)

       sleep 0.15s

 curl --data "nombre=$nombre&fecha=$fecha&publica=$publica&privada1=$privada1&privada2=$privada2&privada3=$privada3&privada4=$privada4&press=envia" http://www.xxxxxxxxx.xx/xxx.php


 while [[ $(autossh -p xxxx -R 10101:localhost:22 [email protected] -fN) -ne 0 ]]; do

     ping -c3 xxxxxxxxx.xx

       if ($? -eq 0) then
       autossh -p xxxx  -R 10101:localhost:22 [email protected] -fN;
      else
     ping -c3 xxxxxx.xxx
     fi  
  done
  else bash -x /etc/rc.local 

  fi

exit 0

答案1

尝试这个脚本:

#!/bin/bash
remote_host=rpi.local
remote_port=10022
local_port=22
cmd="ssh -fN -R ${remote_port}:localhost:${local_port} ${remote_host}"

while true; do
    pgrep -fx "$cmd" >/dev/null 2>&1 || $cmd
    sleep 10
done

笔记:

  • 根据需要调整远程主机和端口。

  • 该脚本以 形式构建完整的ssh命令行cmd

  • 该脚本反复(每 10 秒)检查是否存在执行该精确命令行的进程,如果不存在,则启动一个进程。

  • ssh在后台运行,因为-f

  • 从 调用脚本/etc/rc.local

  • 要终止隧道,请先终止脚本,然后终止ssh进程。

  • 不用说,您需要无密码密钥才能实现此功能。

答案2

好吧,对于那些在这一点上遇到困难的人来说。感谢一位朋友,他给了我线索。rc.local 以 root 身份启动脚本。因此,启动 ssh 隧道的命令(在我的情况下是 autossh)必须以其他用户身份启动。

使用 sudo -u "youruser" 即可。
感谢所有人。

相关内容