2017-06-02 85 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