我正在尝试使用脚本在Ubuntu 13.04 64位上自动执行ssh隧道。它基于Pexpect模块中的ssh_tunnel示例(http://www.noah.org/wiki/pexpect#ssh_tunnel.py)
但是在我的机器上运行代码时出现问题。我想检查是否有任何已经运行的活动,非解散的ssh隧道。如果我在终端中检查这个,我会收到ssh-agent和ssh:
user@comp$ ps -e|grep ssh
3578 ? 00:00:00 ssh-agent
9686 pts/0 00:10:31 ssh <defunct>
10955 pts/0 00:00:02 ssh
所以我尝试使用grep的-v选项(反转选择)过滤结果,我能够获得活动隧道。这将允许我确定是否需要打开新隧道:
user@comp$ ps -e|grep ssh|grep -v agent|grep -v def
10995 pts/0 00:00:00 ssh
不幸的是,如果我使用pexpect.spawn调用上面的命令,然后按以下方式执行:
ps = pexpect.spawn ('ps -e|grep ssh | grep -v agent | grep -v def')
res1 = ps.expect (['ssh', pexpect.EOF, pexpect.TIMEOUT])
res1返回1,表示pexpect.EOF(找不到ssh进程)
我在这里做错了什么?否则,是否有另一种方法可以检查是否已经运行了ssh,以便我不会打开另一个
答案 0 :(得分:0)
我建议使用fabric通过ssh发布命令。
$ pip install fabric
这里,我将在本地计算机(127.0.0.1)上运行该命令作为示例。
from fabric.api import run, env
command = 'ps -e|grep ssh | grep -v agent | grep -v def'
env.host_string = '127.0.0.1'
env.password = 'mypassword'
run(command)
...
[127.0.0.1] out: 4921 ?? 0:00.06 /usr/sbin/sshd -i
[127.0.0.1] out: 4924 ?? 0:00.01 /usr/sbin/sshd -i
[127.0.0.1] out: 5196 ?? 0:00.00 /usr/libexec/launchproxy /usr/sbin/sshd -i
[127.0.0.1] out: 5197 ?? 0:00.04 /usr/sbin/sshd -i
[127.0.0.1] out: 5198 ?? 0:00.01 /usr/sbin/sshd -i
[127.0.0.1] out: 5199 ?? 0:00.03 /usr/sbin/sshd -i
[127.0.0.1] out: 5200 ?? 0:00.01 /usr/sbin/sshd -i
[127.0.0.1] out: 5201 ?? 0:00.06 /usr/sbin/sshd -i
[127.0.0.1] out: 5204 ?? 0:00.00 /usr/sbin/sshd -i
[127.0.0.1] out: 4920 ttys002 0:00.02 ssh smlstvnh@127.0.0.1
[127.0.0.1] out: 5242 ttys004 0:00.00 grep ssh