我正在寻找一种可靠的方法来在笔记本电脑启动时启动安全隧道。
引导过程的其他部分不需要此隧道,但用户在后续任何时候都可能需要它。它应该“正常工作”,用户不必监视和修复它。
安全隧道将从绑定到远程服务器上的本地主机(在本例中为 redis 数据库)的不安全应用程序“拉入端口”到 ubuntu 笔记本电脑。
例子:
远程服务器:example.net
要转发的远程端口:6379,仅绑定到 example.net 的本地主机
远程用户:[电子邮件保护]
密钥文件: [电子邮件保护]已授权没有密码的 ssh 密钥对,一个密钥存储在服务器上的 authorized_keys 中,另一个密钥存储在笔记本电脑上的 /root/moleKey.rsa 中
这在笔记本电脑的终端窗口内有效:
$ sudo su
...
# ssh -i /root/moleKey.rsa -L 16379:localhost:6379 [email protected] -N &
# exit
$ telnet localhost 16379
(works fine)
^C
所以我尝试把
ssh -i /root/moleKey.rsa -L 16379:localhost:6379 [email protected] -N &
进入 /etc/rc.local
但这并不可靠,当需要隧道时,ssh 进程消失了,我在系统日志或消息中找不到任何错误行
有没有更可靠的方法在启动时启动安全隧道,或者是否有一个管理器可以根据需要重新启动安全隧道?
答案1
我也遇到了同样的问题,/etc/rc.local
重启后无法继续使用
Upstart 是一个很好的解决方案,它对我有用:
# location: /etc/init/tunnel.conf
description "persistent ssh tunnel through reboots"
author "morgan mcdaris <[email protected]>"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [016]
respawn
respawn limit 5 60
script
exec su LOCAL_USERNAME -c "ssh -N -R 4040:localhost:22 -i /home/LOCAL_USERNAME/.ssh/id_rsa REMOTE_USERNAME@REMOTE_MACHINE_IP"
end script
post-start script
PID=`status tunnel | egrep -oi '([0-9]+)$' | head -n1`
echo $PID > /var/run/tunnel.pid
end script
post-stop script
rm -f /var/run/tunnel.pid
end script
您需要输入以下值:
LOCAL_USERNAME
REMOTE_USERNAME
REMOTE_MACHINE_IP
之后,您可以通过重新启动或以下方式启动它:
$ sudo start tunnel
如果你想做一些监控工作,启动后脚本会提供一个 pid 文件
答案2
对于 ubuntu 11.10+,包“gstm”可以提供一种更简单的方式来设置隧道。
看