2016-04-25 5 views
-1

Мне интересно, как выполняются команды.Как выполняются команды?

Скажем, я даю ему env.user=User, env.host=HOST. Тогда я спрашиваю его sudo('ls') Является ли это эквивалентным мне, набирая в оболочку: ssh [email protected] 'sudo(/bin/ls)' или его больше: ssh [email protected] в первый раз, затем sudo ls командующий во второй раз?

Я спрашиваю, что, потому что иногда с помощью оболочки, если TTY имеет плохую конфигурацию (я немного размыто на это), ssh [email protected] 'sudo /bin/ls' возвращение: sudo: no tty present and no askpass program specified но вы можете войти в систему с ssh [email protected] затем sudo ls и этим работает.

Я не знаю, как копировать ошибку no tty, но я знаю, что это может произойти. Будет ли это блокировать команду sudo от Fabric?

ответ

1

В принципе, как это работает:

  • Сначала устанавливается соединение (эквивалент как делать ssh [email protected])
  • Над этой связи команда выполняется следующим образом:

    sudo -S -p 'sudo password:' /bin/bash -l -c "your_command" 
    

    Вы можете также позволяют Fabric не запрашивать pty с аргументом pty=False, env.always_use_pty=False или --no-pty вариант командной строки.