Как запустить Python Paramiko SFTP с помощью sudo?

Используя стандарт client.open_sftp() handle дает мне элементы управления SFTP, но без прав sudo / root, /etc/** файлы не могут быть отредактированы. У меня есть пользователь, у которого есть доступ к паролю без пароля, я подумал, что могу начать с sudo su а затем вызвать SFTP, но это не так.

t = paramiko.Transport(('192.168.56.102', 22))  
t.connect(username='vagrant', password='vagrant')
chan = t.open_session()
chan.get_pty()
chan.invoke_subsystem('sftp')
chan.exec_command('sudo su')
sftp = paramiko.SFTPClient.from_transport(t)

.. Ошибка

paramiko.ssh_exception.SSHException: канал закрыт.
ОТЛАДКА:paramiko.transport:EOF в транспортной теме

Любые советы, как заставить Paramiko открыть SFTP с доступом sudo?

1 ответ

Во-первых, автоматизация su или же sudo это не правильное решение.

Правильное решение - настроить выделенный закрытый ключ с теми привилегиями, которые необходимы для вашей задачи.


invoke_subsystem а также exec_command как правило, взаимоисключающие. Вы можете использовать один или другой, но не оба. "Подсистема" является своего рода псевдонимом "команды". То есть "sftp" Подсистема обычно является псевдонимом "/bin/sftp-server" команда (думал, что это очень упрощенное объяснение).


Нет встроенной поддержки для выполнения подсистемы SFTP от имени другого пользователя.

Так что все, что вы можете сделать, это выполнить sftp_server бинарный напрямую как другой пользователь.

chan.exec_command('sudo su -c /bin/sftp-server')

(Предполагается, что *nix OpenSSH сервер)

И вы определенно не можете запросить PTY (get_pty) поскольку это несовместимо с протоколом SFTP.

Другие вопросы по тегам