我有一台运行 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 尝试连接