Это самый прямой ответ на ваш вопрос: у вас на самом деле нет проблем;вы не понимаете, как работают Fabric run () и sudo ().
Ваш «обходной путь» НЕ является обходным путем, это 100% правильный ответ на проблему.
Вот простой набор правил: 1) Используйте «run ()», когда вы не ожидаете приглашения.2) используйте «sudo ()», когда ожидаете приглашения.(это должно быть верно для всех или большинства команд, требующих приглашения, даже если рассматриваемый исполняемый файл не является Bash или Sudo).
Этот же ответ применяется к людям, пытающимся запускать команды под "sudo".Даже если у sudoers есть конфигурация без пароля для текущего пользователя в какой-либо системе, если вы используете sudo () вместо run (), вы вызовете запрос (если код Fabric уже не содержит пароль или ключ ENV).
Кстати, автор Fabric ответил на мой вопрос - очень похожий на ваш вопрос - в #IRC.Хороший парень, один из незамеченных героев открытого источника сохраняющихся в его ткани и Paramiko работе.
... В моей тестовой среде всегда есть 1 имя пользователя с полным доступом без пароля к sudo.Ввод sudo echo hello
не подскажет мне.Кроме того, этот пользователь sudo настроен на "! Requiretty", поэтому все команды могут выполняться по SSH (например, переключение SSH между хостами).Это означает, что я могу просто использовать «run ()» для выполнения «sudo что-то», но это просто другая команда, которая запускается без приглашения.Что касается безопасности, то чья-то задача - заблокировать производственный хост, но не тестовый хост.(Если вас заставляют что-то проверять, а вы не можете автоматизировать, это огромная проблема).