Ubuntu 13.04 64 ビットで ssh トンネリングを自動化するスクリプトを実行しようとしています。これは、Pexpect モジュール ( http://www.noah.org/wiki/pexpect#ssh_tunnel.py )にある ssh_tunnel の例に基づいています。
しかし、私のマシンでコードを実行すると問題が発生します。アクティブで機能していない 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 が既に実行されているかどうかを確認して、別のものを開かないようにする別の方法はありますか