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
, так что вы можете набрать как можно больше команд за один проход, просто разделив их с помощью ;
.