2012-08-03 57 views
3

我的情況是我需要登錄到遠程計算機,然後執行sudo來另一個帳戶像(sudo su anotheract),然後運行其他所需的命令。如何的paramiko模塊在遠程機器上運行sudo命令的Python腳本

但我能夠用下面的腳本成功地連接到遠程計算機。但劇本在我執行sudo命令(sudo su anotheract

能否請你幫我找到這個代碼修復行掛?

import paramiko 

ssh = paramiko.SSHClient() 

ssh.set_missing_host_key_policy(
    paramiko.AutoAddPolicy()) 

ssh.connect(hostname='XX.XXX.XX.XX',port=22, username='myname',password='XXXXX') 

ssh.exec_command=("sudo su anotheract") 

stdout,stdin,stderr=ssh.exec_command("java -jar /usr/share/XXX/LogR.jar") 

print stdout.readlines() 

回答

-2

它可以因爲sudo等待密碼而被掛起。嘗試將NOPASSWD:聲明添加到/etc/sudoers

user ALL = NOPASSWD: /bin/true 

而且也不可能用su改變用戶,然後繼續su結束後做的東西。當su完成時,您將回到原始用戶的原始外殼。

所以,你需要與sudo運行所有命令:

stdout,stdin,stderr = ssh.exec_command=("sudo -u anotheract java -jar /usr/share/XXX/LogR.jar") 
+0

感謝您的回覆HI實際上NOPASSWD已經在那裏了在/ etc/sudoers文件,我已經檢查也是同樣的,即如果我做SSH到偏遠的服務器和運行sudo的蘇anotheract手動運行該命令,它是不要求密碼和徹底。面對問題只能通過腳本.. – user1573644 2012-08-03 10:25:40

+2

很好,我們有派對:「每個人今晚ROOT」 – Denis 2012-08-03 10:47:35

+0

@Denis:你爲什麼這麼認爲?你如何使用這一行爲每個人(甚至是'user')獲得rootrights?你知道這條線的意思嗎? – 2012-08-03 12:29:50

-1
import pxssh 
ssh = pxssh.pxssh() 
ssh.login('host', 'user', 'password') 
ssh.sendline("sudo su anotheract") 
ssh.prompt('yourrootpassword') 

並在你不能這樣做,因爲須藤期望從tty的命令,然後它不是引發異常sudo的命令,這就是大多數Linux系統的paramiko,但是你可以嘗試invokeshell方法,但是我在很多年前使用過paramiko,我不記得它有什麼問題。如果你想在shell上發送各種命令,你可以使用pxssh。

+0

喜試運行的任何其他腳本,但沒有幫助dueing sudo命令的任何解決辦法? – user1573644 2012-08-13 08:57:50

+0

什麼操作系統安裝在遠程計算機上進行遠程ssh和須藤或使用的paramiko使用PXssh – Denis 2012-08-13 18:57:35

+0

@denis如何在Linux中使用'paramiko'? – 2014-08-26 08:36:37

2

一個(不是很安全)的方式來做到這一點是菸斗的密碼。需要說明的是,你正在使用的用戶使用的paramiko應該有須藤權限連接到框。

例如:

supass = 'some_pass' 

stdout, stdin, stderr = ssh.exec_command('echo %s | sudo -S anotheract' % supass) 

再次,這是不是一個非常安全的實現,但得在一個瞬間完成任務。

+0

我試過你的方法,並且'm getting'標準必須是tty ' – 2014-08-26 08:36:04

+0

@YogeeshSeralathan paramiko.SSHClient()。exec_command('your cmd',get_pty = True) – 2017-06-05 20:23:43

相關問題