Почему paramiko не может запустить эту команду? (Питон)

echo Something=Something > file

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


person Takkun    schedule 07.06.2011    source источник


Ответы (1)


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

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

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

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

person Spencer Rathbun    schedule 07.06.2011