Почему Paramiko не может запустить эту команду?(Python) - PullRequest
1 голос
/ 07 июня 2011
echo Something=Something > file

Я могу использовать exec_command от paramiko для выполнения cat, grep и ls, но всякий раз, когда я пытаюсь изменить файл, он ничего не делает.Я уже пробежал su до этого.Файл остается точно таким же, каким он был до запуска команды.

1 Ответ

2 голосов
/ 07 июня 2011

Это потому, что вы должны открывать новый канал для каждого вызова exec_command.Это теряет аутентификацию команды su, поскольку она связана с конкретным каналом.

У вас есть несколько вариантов.

  1. запустить команду с sudo, что может быть невозможно через paramiko
  2. Войдите в систему как пользователь root, что не обязательнохорошая идея
  3. Использовать invoke_shell () на вашем канале, а затем отправлять команды через std в оболочку

Опция 3 позволяет интерактивно использовать ssh с paramiko, сохраняя информацию о состоянии без изменений,Это то, что вам нужно для команд su.Это также позволяет вам создавать оболочку pexpect-типа вокруг вашего соединения с оболочкой, отслеживая канал stdout на наличие признаков того, что все сделано, и вы можете отправлять дополнительные команды через stdin.Просто следите за тем, чтобы каналы не заполнялись и не блокировались, пока вы не прочитаете данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...