Можно ли передавать пароли на сценарий оболочки?

11

Долгое время я искал это, я хотел бы знать, возможно ли передавать пароли в сценарии оболочки? Многие ответы вернулись без. Недавно я прочитал статью о том, как передавать пароли в сценарии оболочки. Я пробовал это, но это не похоже на работу. Это ссылка . Может ли кто-нибудь проверить и вернуться обратно? Также, пожалуйста, скажите мне, есть ли способ передать пароли в сценарии оболочки? Если нет, пожалуйста, скажите мне, как Linux получает ввод для пароля?

karthick87
источник

Ответы:

12

Под «вводом паролей» вы, скорее всего, подразумеваете ввод данных, которые не видны пользователю.

(предложено geirha) При использовании bash вы можете использовать -sопцию, чтобы предотвратить отображение напечатанных символов:

read -p "Password please: " -s pass

Или измените поведение терминала, чтобы скрыть напечатанные символы с помощью stty -echo(отключить echo). После прочтения пароля, встроенного в readпеременную оболочки (в приведенном ниже примере $pass), включите его снова с помощью stty echo. Поскольку новая строка из Enterскрыта для, вы должны напечатать новую строку, чтобы получить будущие выходные данные в новой строке.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readи printfвстроенные оболочки. sttyпредоставляется coreutilsпакетом, который установлен по умолчанию. Это означает, что этот фрагмент очень переносим.

Примечание: -pопция не стандартная, а из bash. Если вам нужно отобразить подсказку в других оболочках, используйте:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Ссылки:

Lekensteyn
источник
Я просто хочу дать пароль root удаленной системы в сценарии. Возможно ли это в вашем случае?
karthick87
@ karthick87: нет, этот скрипт просто собирает данные, которые пользователь вводит в интерактивном режиме. Если вы хотите поместить корневые пароли в сценарии, почему бы вам не рассмотреть возможность входа на основе ключей?
Лекенштейн
1
Чтение Bash также имеет возможность отключить эхо во время чтения в строке. См help '\read'.
гейра
В zshэто достижимо через read -s 'pw?Prompt text', где pwпеременная , где пароль будет помещен и -sэто флаг , чтобы ввести скрыть.
baldrs
2

В какую программу вы хотите передать пароль?

У меня работает скрипт по ссылке. Обратите внимание, что это не сценарий оболочки, а ожидаемый сценарий (необходимо expectустановить пакет`). Использование ожидаемого является распространенным способом автоматизации текстовых интерактивных программ.

Неинтерактивные sshвходы часто выполняются с использованием аутентификации на основе ключей с пустой парольной фразой.

Некоторые другие программы (например sudo) имеют параметры для чтения пароля из стандартного ввода.

Предоставление пароля в качестве параметра командной строки часто является проблемой безопасности, так как в большинстве систем любой пользователь может видеть любые другие процессы пользователей, включая аргументы командной строки, используя простые инструменты, такие как ps.

Флориан Диш
источник
Я просто хочу передать пароль в программу ssh.
karthick87
Поэтому, возможно, аутентификация по ключу работает для вас: используйте ssh-keygenдля создания ключа аутентификации (просто нажмите Enter, когда вас спросят о парольной фразе) и скопируйте его для удаленного пользователя, используя. ssh-copy-idЕсли аутентификация по ключу включена для sshd (по умолчанию), то ssh будет не спрашивать у вас пароль.
Флориан Диш
1

Скрипт никогда не должен обрабатывать пароли. Если приложение требует пароль, попросите его сам, или, если это невозможно, найдите более эффективные средства аутентификации в приложении. Пожалуйста, прочитайте http://mywiki.wooledge.org/BashFAQ/069

geirha
источник
0

Есть способ хранить пароли в скрипте bash, но вы должны зашифровать скрипт, чтобы никто не мог его прочитать, или запустить какой-либо отладчик, чтобы увидеть, что именно он делает. Чтобы зашифровать скрипт bash / shell и сделать его исполняемым, попробуйте скопировать и вставить его здесь.

На приведенной выше странице все, что вам нужно сделать, это отправить свой сценарий (вы можете сначала отправить образец сценария для вашего спокойствия). Zip-файл будет создан для вас. Щелкните правой кнопкой мыши ссылку для скачивания и скопируйте предоставленный вами URL. Затем перейдите в окно UNIX и выполните следующие действия.

Монтаж:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

То, что вышеупомянутая команда установки сделает для вас:

  1. Он установит зашифрованный скрипт в каталог /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Он поместит ссылку на этот зашифрованный скрипт в любой каталог, который вы указали при замене /home/(your-username)- таким образом, он позволит вам легко получить доступ к скрипту без необходимости набирать абсолютный путь.

  3. Гарантирует, что НИКТО не может изменить сценарий. Любые попытки изменить зашифрованный сценарий приведут к его неработоспособности ... пока эти попытки не будут остановлены или удалены

  4. Гарантирует, что абсолютно никто не сможет сделать копии этого. Никто не может скопировать ваш скрипт в укромное место и попытаться обойти его, чтобы посмотреть, как он работает. Все копии скрипта должны быть ссылками на оригинальное местоположение , указанное вами при установке.

НОТА:

Я не верю, что это работает для интерактивных сценариев, которые запрашивают у пользователя ответ. Значения должны быть жестко закодированы в сценарии. Шифрование гарантирует, что никто не сможет увидеть эти значения, поэтому вам не нужно об этом беспокоиться.

SimplifiedWorkings
источник
-1

Вы можете просто сделать что-то вроде этого.

# echo -e "password_here\npassword_here" | su user

источник

fromnaboo
источник