Как запустить 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.