2017-06-02 122 views
-1

我需要一個腳本來使用python和paramiko遠程執行某些操作。我在遠程機器上執行sudo操作使用讓su非交互式

'echo'+ password +'| sudo -S'+'cmd_to_be_executed'

和tty問題是通過在paramiko中將flag get_pty設置爲true來解決的。現在有一臺遠程機器對該用戶沒有sudo權限,只有使用su命令才能切換到root用戶。所以我試了

'echo'+ password +'| su -c'+'cmd_to_be_executed'

但它拋出tty問題。現在,即使我設置PTY標誌的paramiko相同的問題出現真正

標準必須是一個tty

有什麼辦法解決?任何幫助非常感謝謝謝!

回答

0

是的。你可以使用一個Python命令腳本來實現這一點。

使用argparse接受命令行參數,這將是您的密碼。

使用subprocess.run來調用您的腳本。您可能需要在子流程中使用shell = True。 (或使用Pexpect而不是子進程)。

嘗試是這樣的:

import subprocess, argparse 

#Set up the command line arguments 

parser = argparse.ArgumentParser(description='Provide root password.') 
parser.add_argument('--password', help='password help') 

# Collect the arguments from the command line 
args = parser.parse_args() 

# Open a pipe to the command you want to run 
p = subprocess.Popen(['su', '-c', !!your command here!!],stdout=subprocess.PIPE,stdin=subprocess.PIPE) 

# Prepare the password and write it 
pwd = args.password + '\n' 
p.stdin.write(pwd) 
p.communicate()[0] 
p.stdin.close() 
+1

'popen方法()'不能處理像'ssh' /'su'從tty的讀取密碼的命令。這就是爲什麼我們有'期望'/'pexpect'。 – pynexj

+0

同樣的錯誤仍然存​​在,此外,我應該首先使用ssh連接到遠程機器 –

+0

是的,您需要在遠程計算機上運行python腳本(在https:// stackoverflow上查看之後)。 COM /問題/ 4180390 /執行遠程的Python腳本,通過-SSH) – Alan