У меня есть скрипт, который запускает другой скрипт через SSH на удаленном сервере, используя sudo. Однако, когда я набираю пароль, он появляется на терминале. (В остальном работает нормально)
ssh user@server "sudo script"
Какой правильный способ сделать это, чтобы я мог ввести пароль для sudo через SSH без пароля, появляющегося при вводе?
ssh <user@server> sudo <script>
, так как я получал ошибкуsudo: no tty present and no askpass program specified
Ответы:
Другой способ - использовать
-t
переключатель дляssh
:Смотрите
man ssh
:источник
ssh -t localhost <<< "sudo touch file;"
РЕДАКТИРОВАТЬ Очевидно, что вы действительно предоставляете команду как параметр, а не через стандартное (что имеет смысл задним числом).-t
метод также покажет цветной вывод команд , которые обычно сделать это.Я смог полностью автоматизировать его с помощью следующей команды:
Преимущества:
Относительно безопасности: как сказал Курт , выполнение этой команды покажет ваш пароль в вашей локальной истории bash, и лучше сохранить пароль в другом файле или сохранить команду all в файле .sh и выполнить ее. ПРИМЕЧАНИЕ. Файл должен иметь правильные разрешения, чтобы доступ к нему имели только разрешенные пользователи.
источник
-t
, но я не прочитал руководство достаточно внимательно, чтобы увидеть, что ты мог пройти его дважды! Это то, что я искал месяцами! В качестве дополнения безопасности, я просто установил переменную пароля перед запускомread -s -p "Password: " pw
, а затем сделалecho "$pw" | ....
. Я сейчас свернул это в удобный сценарий для себя :).Предполагая, что вы не хотите запрашивать пароль :
пример
источник
Sudo over SSH с передачей пароля, tty не требуется:
Вы можете использовать sudo поверх ssh, не заставляя ssh иметь псевдо-tty (без использования ключа ssh "-t"), указав sudo не требовать интерактивный пароль и просто получить пароль от стандартного ввода. Вы делаете это с помощью переключателя "-S" на sudo. Это заставляет sudo прослушивать пароль на stdin и прекращать прослушивание, когда видит новую строку.
Пример 1 - Простая удаленная команда
В этом примере мы отправляем простую
whoami
команду:Мы говорим sudo не выдавать приглашение и принимать его от stdin. Это делает пароль sudo абсолютно бесшумным, поэтому единственный ответ, который вы получите, - это вывод
whoami
.Преимущество этого метода заключается в том, что вы можете запускать программы через sudo по ssh, которые сами требуют ввода stdin. Это связано с тем, что sudo использует пароль в первой строке стандартного ввода, а затем разрешает любой программе, которая запускается, продолжать захват стандартного ввода.
Пример 2 - Удаленная команда, которая требует своего собственного стандартного ввода
В следующем примере удаленная команда «cat» выполняется через sudo, и мы предоставляем несколько дополнительных строк через stdin для отображения удаленной кошкой.
Выходные данные демонстрируют, что
<remote_sudo_password>
строка используется sudo, и что удаленно выполняемый cat отображает дополнительные строки.Пример того, где это может быть полезно, - это если вы хотите использовать ssh для передачи пароля привилегированной команде без использования командной строки. Скажем, если вы хотите смонтировать удаленный зашифрованный контейнер поверх ssh.
Пример 3 - Монтирование удаленного контейнера VeraCrypt
В этом примере сценария мы удаленно монтируем контейнер VeraCrypt через sudo без дополнительного текста запроса:
Следует отметить, что во всех приведенных выше примерах командной строки (все, кроме сценария)
<< EOF
конструкция командной строки будет приводить к тому, что все набранное, включая пароль, будет записано в .bash_history на локальной машине. Поэтому настоятельно рекомендуется, чтобы для реального использования вы использовали либо полностью, через скрипт, как в примере с veracrypt выше, либо, если в командной строке, поместили пароль в файл и перенаправили этот файл через ssh.Пример 1a - Пример 1 без локального пароля командной строки
Таким образом, первым примером станет:
Пример 2a - Пример 2 без локального пароля командной строки
и второй пример станет:
Поместить пароль в отдельный файл не нужно, если вы помещаете все это в сценарий, так как содержимое сценариев не попадает в вашу историю. Тем не менее, это может быть полезно, если вы хотите разрешить пользователям, которые не должны видеть пароль, выполнять скрипт.
источник
cat
и передать результаты в sudo? Вы можете просто использоватьsudo
в качестве основной команды SSH Remote?cat
используется для передачи пароля пользователя к sudo с другой стороны. Если пользователь может запустить sudo без пароля, то это не требуется, но я не предлагаю эту конфигурацию. Причина этого в том, что пароль не отображается в командной строке удаленного sysrtem. Командные строки небезопасны, любой пользователь может видеть каждую командную строку с помощьюps auxwww
.cat
в команде sshcat \| sudo --prompt="" -S...
. Если-S
заставляетsudo
читать пароль со стандартного ввода, нужен ли вообще кот и труба? Может ли команда ssh просто бытьsudo --prompt="" -S...
?Лучший способ
ssh -t user@server "sudo <scriptname>"
, напримерssh -t user@server "sudo reboot"
. Сначала будет запрашиваться пароль для пользователя, а затем для пользователя root (поскольку мы запускаем скрипт или команду с привилегиями root.Я надеюсь, что это помогло и очистило ваши сомнения.
источник
NOPASS
в конфигурации на вашей целевой машине это решение. Продолжить чтение на http://maestric.com/doc/unix/ubuntu_sudo_without_passwordисточник
источник
Я столкнулся с проблемой,
Тогда я попробовал с
не работал
это работало правильно!
источник
В зависимости от вашего использования, я имел успех со следующим:
Это запросит пароль root и затем правильно выполнит команду.
источник