如何在 Arch 中以太网连接成功后运行命令?

如何在 Arch 中以太网连接成功后运行命令?

我有一台运行 ArchARM 的 Raspberry Pi,我想在它通过以太网连接到网络时立即建立反向 SSH 隧道。

我在 中制作了一个可执行 ( +x) shell 脚本/usr/bin,并希望每当默认网络管理器在 eth0 接口上获取 IP 时运行该脚本。

或者,如果没有 SSH 隧道或在路由器上打开端口,我可以用最好的方法做什么?

答案1

你可以使用 -R 参数进行反向 SSH (我用法语写了一篇关于此的文章这里) 和 cron 或者使用它来提供服务。

这是翻译的内容

user@mynewRaspberry :~$ ssh -R 61337:localhost:22 [email protected] 

之后您可以从另一个地方登录,这里以 z8po.dyndns.info 为例

z8po@hive :~$ ssh z8po.dyndns.info -p 61337

接下来让我们使用while 循环在您的脚本中检查 ssh 是否永远重新启动。

while true do ssh -R 61337:localhost:22 [email protected] done

你可以在 ssh 客户端或服务器上使用 keep alive 来维持连接,在 /etc/ssh/sshd_config 或 ~/.ssh/config 中添加以下行

 ClientAliveInterval 60

不要忘记使用 rsa 密钥而不是 paswsrod 来实现无需提示的自动登录,或者如果您确实想使用密码,请使用 user:password@ip 更改 ssh 命令,但它的安全性较低。

第一种方法 Cron it

在 /home/USER/autolauncher.sh 中创建一个脚本,检查是否已启动

#!/bin/sh
if ps -ef | grep -v grep | grep yourscript.sh ; then
        exit 0
else
        while true do ssh -R 61337:localhost:22 [email protected] done
        exit 0
fi

并编辑你的 crontab

crontab -e

将其添加到其他 cron 作业之后;每 5 分钟启动前一个脚本(如果已在运行,则该脚本将不起作用)

   */5 * * * * /home/USER/autolauncher.sh

第二种方法:开机启动服务

在 init.d 中创建或复制脚本,使用 vi 将命令添加到其中:

  sudo nano /etc/init.d/autolauncher.sh

使其可执行

  sudo chmod +x /etc/init.d/autolauncher.sh

update-rc.d 创建并配置启动:

  sudo update-rc.d autolauncher.sh defaults

现在你有两种方法可以让你的 rasperry 尝试连接

相关内容