AlexS
Точно настроенный ответ (который я сейчас использую в производстве):
def sudo_run_commands_remote(command, server_address, server_username, server_pass, server_key_file):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=server_address,
username=server_username,
password=server_pass,
key_filename=server_key_file)
session = ssh.get_transport().open_session()
session.set_combine_stderr(True)
session.get_pty()
session.exec_command("sudo bash -c \"" + command + "\"")
stdin = session.makefile('wb', -1)
stdout = session.makefile('rb', -1)
stdin.write(server_pass + '\n')
stdin.flush()
print(stdout.read().decode("utf-8"))
Удалите часть key_filename
метода connect
, если вы не используете файл ключа, и, напротив, если вы используете только ключ без пароля, удалите часть password
.
Некоторые примечания по этому поводу заключаются в том, что он поддерживает несколько команд. Это означает, что выполняется bash
как root
, поэтому вы можете выполнять столько команд, сколько можете, за один запуск, просто разделяя их с помощью ;
.
person
AmirHossein
schedule
16.02.2018