Запуск операции SFTP от имени другого пользователя через Python Paramiko - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу подключиться к своему серверу Ubuntu, используя служебную учетную запись, но выполнять операции передачи файлов от имени другого пользователя.Мой sshd_config имеет следующее содержимое (среди прочего):

PubKeyAuthentication yes
PasswordAuthentication yes
Subsystem sftp /usr/lib/openssh/sftp-server

Я пробовал следующий код, но безуспешно:

t = paramiko.Transport(('<address>', <port>))  
t.connect(username='serviceAccount', password='<password>')
channel = t.open_session()
channel.exec_command('sudo su -l <other user> -c /usr/lib/openssh/sftp-server')
sftp = t.open_sftp_client()
file = sftp.file("<some path>", "w", bufsize=...)
file.write(...)
file.close()
sftp.close()
channel.close()
t.close()

Это ошибка, которую я вижу, когдаЯ запускаю этот код:

IOError: [Errno 13] Permission denied

1 Ответ

0 голосов
/ 26 апреля 2018

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

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


В любом случаеopen_sftp_client и exec_command работают на двух разных каналах SSH.Таким образом, ваш код не может работать, так как sftp работает в сеансе без повышенных прав, на него вообще не влияет exec_command.

Нет явной поддержки запуска SFTP с su в Paramiko (какэтот подход неверен и едва ли стандартизирован.)

Вам нужно будет реализовать альтернативу SFTPClient.from_transport, которая будет называть ваш exec_command вместо invoke_subsystem.

...