2011年10月14日星期五

自动建立SSH链接的辅助脚本

由 于工作需要,我在GNOME的启动程序中添加了一条用autossh建立SSH链接的命令,但它就是无法执行。经研究发现,当这条命令执行的时 候,NetworkManager的WiFi链接尚未建立!网上有人说用wicd来代替NetworkManager,但我怕麻烦,就自己写了一段脚本, 自动检测是否有网络链接,直到检测到网络链接即执行autossh。程序相当简单:

#!/usr/bin/env python
import time
import subprocess
import syslog
import sys

def connected():
    with open('/proc/net/route') as f:
        routes = f.read().strip().split("\n")
        return len(routes) > 1

cmd = sys.argv[:]
cmd[0] = 'autossh'
syslog.openlog()
syslog.syslog(' '.join(cmd))
while not connected():
    syslog.syslog("network disconnected, retry in 5 seconds...")
    time.sleep(5)

syslog.syslog("network connected!")
pid = subprocess.Popen(['killall', '-q', 'autossh']).pid
time.sleep(1)
try:
    pid = subprocess.Popen(cmd).pid
    syslog.syslog("PID of autossh process: " + str(pid))
except OSError as e:
    syslog.syslog(str(e))
syslog.closelog()

没有评论: