Как дать пароль в скрипте оболочки? - PullRequest
5 голосов
/ 20 февраля 2012

В файле сценария оболочки я использую некоторые команды, такие как scp и make install, которые запрашивают мой пароль.

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

Я просто хочу сделать все это с помощью сценария оболочки без взаимодействия, так как я могу избежать запроса пароля здесь?

Ответы [ 5 ]

8 голосов
/ 20 февраля 2012

Краткий ответ: НЕ

Использовать аутентификацию с открытым ключом для SCP и sudo с директивой NOPASSWD для make install

5 голосов
/ 20 февраля 2012

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

4 голосов
/ 23 февраля 2012

Если вы не можете использовать ssh trust и вам необходимо ввести пароль позже в вашем скрипте, используйте read -s -p "Password:" USER_PASSWORD, чтобы тихо прочитать пароль.Затем вы можете export USER_PASSWORD ожидать сценарий, избегая его отображения в ps:

    #!/usr/bin/expect -f
    spawn scp some.file USER@otherhost:~
    expect "assword:"
    send -- "$env(USER_PASSWORD)\r"
    expect eof
2 голосов
/ 21 февраля 2012

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

Если в вашей среде это сложно, возможно, было бы полезно узнать, что сценарий может указать файл идентификации с помощью аргумента -i, чтобы вам не нужно было настраивать весь домашний каталог или что-то подобное. Существуют и другие параметры, которые помогают использовать аутентификацию по ключу, которую ssh действительно поддерживает по аутентификации по паролю.

Если вы используете это для нескольких пользователей, которым не нужно создавать ключи и копировать их на сервер, вы также можете написать это. Нетрудно проверить наличие существующего ключа и быстро проверить, можно ли с ним установить соединение. Если вы не можете без пароля, то вы бы ssh-copy-id обратились к серверу с просьбой ввести пароль ssh, который один раз и в начале скрипта, так что между запуском и запуском скрипта и его выполнением будет очень небольшая задержка будет только один раз. Вы могли бы даже настроить отдельный ключ для каждого пользователя только для сценария в их собственной директории ~ / .script / key /, так что вы бы препятствовали доступу пользователей к SSH-серверу.

Если вы хотите действительно ограничить действия, которые могут быть выполнены на удаленном сервере этим пользователем, вы можете использовать rssh в качестве оболочки для удаленной учетной записи, что ограничит доступ пользователя к передаче файлов.

1 голос
/ 22 ноября 2012

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

Скрипт расшифровки пароля, назовем его yourcreds.rb, конечно, был ограничен только для root-доступа, а незашифрованные пароли нигде не сохранялись. Например, вы можете запустить:

root @ host: ~ # yourcreds.rb | grep mysql | awk {'print $ 3'}

Который без awk, например, выведет сохраненную строку: сервис | пользователь | пароль | описание | так далее... mysql пароль mysqluser ....

С помощью yourcreds.rb (или чего-либо другого) вы можете вывести только пароль и легко включить этот метод в задания сценариев / cron в больших или более сложных средах.

Также, если я правильно помню, нам не нужно было использовать grep / awk или что-то еще. Мы просто запрограммировали в opts разбирать такие вещи как: yourcreds.rb list mysql или yourcreds.rb -l и т. Д.

Мы использовали blowfish и yamls для хранения зашифрованных паролей. Я уверен, что вы можете быть креативным. Просто убедитесь, что это пуленепробиваемый для всех, кроме root.

...