2009-08-21 30 views
7

私は "python ssh"と尋ねました。素晴らしいモジュールpexpectがあり、ssh(パスワード付き)を使ってリモートコンピュータにアクセスできます。リモートコンピュータからコンソール出力を取得する方法(ssh + python)

リモートコンピュータが接続された後、私は他のコマンドを実行できます。しかし、私は再びPythonで結果を得ることはできません。

p = pexpect.spawn("ssh [email protected]_computer") 
print "connecting..." 
p.waitnoecho() 
p.sendline(my_password) 
print "connected" 
p.sendline("ps -ef") 
p.expect(pexpect.EOF) # this will take very long time 
print p.before 

私の場合、ps -efの結果を得るにはどうすればよいですか?

+0

hmm? p.beforeは出力を与える必要があります –

+0

Pythonは "None"を返します – stanleyxu2005

答えて

1

また、paramikoを調べることもできます。これはPython用のもう1つのSSHライブラリです。

+0

非常に多くの異なるソリューションを試した後、私はこのライブラリが今のところベストプラクティスだと思います。私は、LAN経由で外部ノード上のスクリプトを実行するためにパスワード以外のログインを設定する必要はありません。 – stanleyxu2005

1

p.sendline("ps -ef\n") 

にIIRCを送信してくださいコマンドを完成するために、他のコンピュータはおそらく待っているので、あなたが送ったテキストは、逐語的に解釈されます。

8

さらに簡単なアプローチを試しましたか?私は、リモートホストが知っていることを秘密鍵でssh-agentプリロード実行されているので、これだけで作品を付与

>>> from subprocess import Popen, PIPE 
>>> stdout, stderr = Popen(['ssh', '[email protected]_computer', 'ps -ef'], 
...      stdout=PIPE).communicate() 
>>> print(stdout) 

+1

このチップをありがとう。多くのクライアントに秘密鍵を簡単に設定する方法はありますか?毎週20台のマシンのログファイルをチェックする必要があります。これはpythonスクリプトを書く意欲です。 – stanleyxu2005

+0

さて、各マシンの〜/ .ssh/authorized_keysにあなたの公開鍵を追加するだけです。おそらく、あなたの作業機械のセットがあまり変わっていなければ、これは一回の運動になるでしょう。 ところで、これはSSHエージェントなどを設定するための非常にきちんとした記事です。 http://unixwiz.net/techtips/ssh-agent-forwarding.html –

3
child = pexpect.spawn("ssh [email protected]_computer ps -ef") 
print "connecting..." 
i = child.expect(['[email protected]_computer\'s password:']) 
child.sendline(user_password) 
i = child.expect([' .*']) #or use i = child.expect([pexpect.EOF]) 
if i == 0: 
    print child.after # uncomment when using [' .*'] pattern 
    #print child.before # uncomment when using EOF pattern 
else: 
    print "Unable to capture output" 


Hope this help.. 
関連する問題