我正在尝试使用Python Paramiko ssh模块自动执行linux管理,一切正常,除了sudo。我使用stdin.write()
和stdin.flush()
跟踪了suram的paramiko文档,但到目前为止没有运气。请帮助我。
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host,username=uname,password=pwd)
print('Successfully authenticated on'+ " " +host)
print "\n"
stdin,stdout,stderr = ssh.exec_command('sudo ls')
stdin.write(pwd+'\n')
stdin.flush()
print stdout.readlines()
ssh.close()
答案 0 :(得分:0)
sudo会以非常具体的方式处理您所使用的TTY。有一个命令行选项可以将提示写入stderr
并从stdin
读取,而不是sudo直接处理TTY。
尝试:
stdin, stdout, stderr = ssh.exec_command('sudo -S ls')
如果您正在为系统管理任务执行此操作,那么很多框架已经完成。你可以看看Fabric如果你为大多数事情写python,或者像Ansible这样的东西仍然可以控制ssh
以外的东西,但是可以用更简单的{{{{{{{ 1}}格式。
答案 1 :(得分:0)
您还可以使用atexit模块。它在退出时清除我的功能。
我这样使用它:atexit.register(client.close)