2012-05-30 89 views
1

我有一個要求,我需要做以下SSH使用子模塊

我需要ssh到Linux機器,運行一個命令,得到輸出回來,我需要做一些操作一臺Linux機器。

這可能通過python子流程模塊。

基本上我需要一個.py代碼,其中我會給連接到Linux的IP地址,用戶名和密碼,並運行命令並獲得輸出。

也可以通過Python提供的其他模塊進行操作。

建議歡迎。

+0

請在發佈之前做一些研究http://stackoverflow.com/questions/1233655/what-is-the-simplest-way-to-ssh-using-python – alegen

+0

如果你需要給一個密碼,我不會'我認爲你可以通過子進程來做到這一點。 – mgilson

+0

你有沒有考慮過使用[一個合適的Python SSH模塊](http://stackoverflow.com/questions/1233655/what-is-the-simplest-way-to-ssh-using-python)? – katrielalex

回答

3

你的問題被標記爲「paramiko」,那麼你爲什麼不使用它?

我需要ssh到一個Linux的盒子,運行一個命令,得到輸出回來,我需要做一些操作。

SSH到Linux框(或任何其他ssh服務器)上:

>>> import paramiko 
>>> ssh=paramiko.SSHClient() 
>>> ssh.load_system_host_keys() 
>>> ssh.connect(hostname='localhost', username='haiprasan86', password='secret') 
>>> print ssh 
<paramiko.SSHClient object at 0xdf2590> 

運行命令:

>>> _, out, err = ssh.exec_command('ls -l /etc/passwd') 
>>> # block until remote command completes 
>>> status = out.channel.recv_exit_status() 
>>> print status 
0 

得到的輸出回:

>>> print out.readlines() 
['-rw-r--r--. 1 root root 2351 Mar 27 10:57 /etc/passwd\n'] 

我不知道你想要做什麼操作。

+0

有沒有辦法讓'ssh.exec_command'非阻塞? – zengr

0

如果它只是一個命令,你可以簡單地把它添加到命令行:然後

ssh [email protected] "echo foo" 

將返回FOO。如果在遠程主機的~/.ssh/authorized_keys-文件中將公鑰用於ssh-agent-那麼您甚至不需要詢問密碼。

0

其他選項將是fabric或者如果您需要與遠程命令fexpect進行交互。