LINUX.ORG.RU

пароль в скрипте, без expect

 ,


1

1

Доброго дня господа.
Вопрос с темы частый, но вот решений нигде не могу накопать.
Обычно все заканчивают на выборе expect"а или других сторонних программ.
А если всё же разжевать этот вопрос, если ли способы ввести пароль, штатными средствами?
Очень надеялся на eof, но прямым путём ничего не вышло.
Может кто-то смог бы пролить свет на вопрос?
Заранее благодарен адекватно ответившим.

Ответ на: комментарий от redixin

оно же не просто stdin читает, поэтому либо expect, либо ключи

Для скриптов мне достаточно и sshpass.
Но очень хотелось бы обойтись без сторонних прог.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от redixin

чем ключи не угодили?

Действия не только для домашних нужд, а еще и для рабочих серваков.
Оставить где-то сертификат - было бы катастрофой.
Из этого - ввод только в ручном режиме, в пределах вызова.
Опережая возможный вопрос, а что мешает таки просто ввести его руками, минуя обёртки - в пределах одного вызова скрипта, может понадобиться ввести этот пароль очень много раз, посему очень хотелось бы вывести его(пароль) в переменную.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

Оставить где-то сертификат - было бы катастрофой.

А оставить где-нибудь файл с логином и паролем в плайнтексте - не катастрофа?

shell-script ★★★★★
()
Ответ на: комментарий от Spirit_of_Stallman

Действия не только для домашних нужд, а еще и для рабочих серваков.

Тем более тебе должна нравится идея с ssh ключами.

dada ★★★★★
()
Ответ на: комментарий от Spirit_of_Stallman

плюсую ssh agent!!
у меня alias ssh='ssh -A -t -o StrictHostKeyChecking=no'
ключи только на ноуте.

aol ★★★★★
()

(sleep 3; echo username; sleep 3; echo password; sleep 5; echo «command»; sleep 3; echo «exit») | telnet hostname port

JK
()
Ответ на: комментарий от shell-script

А оставить где-нибудь файл с логином и паролем в плайнтексте - не катастрофа?

Меня поражают такие люди...
Осиль прочитать следующие строки в том сообщении.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

1)Безопасность.
ssh ключи можно и нужно шифровать.
Именно поэтому они обязательны для не_локалхостов.
2)Удобство при работе с самописными скриптами(rsync etc.).
3)Быстрая настройка без лишнего софта.

dada ★★★★★
()

в пакете putty есть програмка plink, она умеет брать пароль из параметров запуска — это то что тебе нужно.

sdio ★★★★★
()
Ответ на: комментарий от sdio

в пакете putty есть програмка plink, она умеет брать пароль из параметров запуска — это то что тебе нужно.

Знаю о таком.
Но вот отколе это обязательная часть всех систем? Я что-то пропустил?

А если всё же разжевать этот вопрос, если ли способы ввести пароль, штатными средствами?

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

Он нужен только на одной системе, откуда будет осуществляться контроль.

Штатные средства? ssh в coreutils не входит если что.

sdio ★★★★★
()
Ответ на: комментарий от dada

так же как и ключ без пароля. А запароленный ключ вы как ssh-agent'у отдаете? Вводите в ручную? Т.е. при рестарте контрольной системы все скрипты по крону отвалятся пока ты им ssh-agent не запустишь?

sdio ★★★★★
()
Ответ на: комментарий от dada

Если мой пароль «password1», то в файле будет написано «password1» ?
Это не очень секьюрно.

Тут это не важно, ибо пароль будет, для каждой сессии, вводиться пользователем, а не лежать где-то в чистом тексте.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от sdio

Он нужен только на одной системе, откуда будет осуществляться контроль.

Тогда мне уже ничего не мешало установить sshpass и не создавать тут тему.
Задача стоит пользовать то что есть.

Штатные средства? ssh в coreutils не входит если что.

Без этого и удалённого подключения быть не может, если что.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от sdio

Тогда тебе не стоило создавать эту тему.

Думаю тут даже глубже.
Тебе просто не стоило отвечать, если не можешь ответить на вопрос темы (or опровергнуть его, как невозможный в реализации).

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от sdio

ssh-agent-ом не пользуюсь.
Я считаю, что пароль нигде (скрипт или что-то ещё) не должен отображаться в открытом виде.
Поэтому советую ТС ssh-key.

dada ★★★★★
()
Ответ на: комментарий от Spirit_of_Stallman

Вопрос чтения пароля ssh'ем описан в документации и на ЛОРе не раз обсуждался, так что или слушай что тебе говорят или ищи сам.

sdio ★★★★★
()
Ответ на: комментарий от dada

Поэтому советую ТС ssh-key.

без пароля? не секурно

sdio ★★★★★
()
Ответ на: комментарий от Spirit_of_Stallman

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

man ssh_config и искать слова ControlMaster/ControlPath/ControlPersist

maloi ★★★★★
()

Plaintext'ом хранить пароль небезопасно - верно.

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

А так, правильно говорят, ключи - твое спасение.

leader32
()

Если тебя не пугает завязанность на Bash, то вместо expect можно использовать запуск через 'coproc'.

ABW ★★★★★
()
Ответ на: комментарий от sdio

Скор? Не, непрактично это, да и невыгодно. Мне.

Что первое пришло в голову как решение написал. Но тоже, тот ещё костыль.

leader32
()
Ответ на: комментарий от at

Прошу прощения, что дёргаю.
А, случаем, не приходилось интегрировать этот скрипт, для работы не через вызов?
При любых танцах, упираюсь в ошибку execvp"а, при вызове через setsid.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

Сам скрипт — нет. Здесь важен принцип работы. Т.е. убедить ssh, что он работает в иксах

[ "$DISPLAY" ] || export DISPLAY=dummydisplay:0
в SSH_ASKPASS поместить имя программы, которая вернёт пароль в стандартном выводе. Если она не установлена, ssh пытается использовать /usr/bin/ssh-askpass (по крайней мере в дебиане). Это может быть что то типа:
cat pass.sh 
echo 'mysuperpass'
и отключиться от управляющего терминала, для чего используется setsid

А какая у Вас возникает ошибка?

at ★★
()
Ответ на: комментарий от Spirit_of_Stallman

Кстати в приведенном скрипте ошибка

exec setsid "$@" # после exec управление скрипту не возвращается, и 

rm "$TMP_PWD" # не выполняется
Т.е. пароль остается в /tmp. Необходимо убрать exec

at ★★
()
Ответ на: комментарий от at

А какая у Вас возникает ошибка?

Спасибо за ответ.
И сказу скажу - я сейчас в замешательстве.
Вчера, когда пробовал в разных вариациях отдать данные в переменные - получал одну и ту же ошибку:

"execvp": No such file or directory
Но сейчас, что бы проверить - запустил скрипт, где просто завернул всё в функцию, и оно ни с того ни с сего - начало правильно работать (с тем, что вчера не работало) :)
function test_1(){
    if [ -n "$SSH_ASKPASS_TMPFILE" ]; then
    ....
}
echo "password" | test_1 ssh -l user -p 444 foo.bar "uname -a"
И важно заметить - я раскурил каждый вызов, и так же пришел к заключению, что мне мешал exec. Но в нынешнем, чудом работающем скрипте - абсолютно оригинальный код, и exec на месте.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman
"execvp": No such file or directory

Такое возможно, если условие

if [ -n "$SSH_ASKPASS_TMPFILE" ]; then
ложно. По причине того, что SSH_ASKPASS_TMPFILE не экспортированна, ошибка в имени переменной и т.д.

В этом случае скрипт, повторно вызывной из ssh, пытается выполнить

exec setsid 'user@host'\''s password: '
и возвращает ошибку. Проверяется командой set -x в начале скрипта ;)

И, если интересно, тот же скрипт, но без использования временных файлов

#!/bin/bash
[ -n "$SSH_PASSWORD" ] && { echo "$SSH_PASSWORD"; exit 0 ; }
[ "$DISPLAY" ] || export DISPLAY=
export SSH_ASKPASS=$0 SSH_PASSWORD
read SSH_PASSWORD
exec setsid "$@"

at ★★
()
Ответ на: комментарий от at

set -x в начале скрипта

Мне прям стыдно стало :)

тот же скрипт, но без использования временных файлов

Красотища та какая)
Спасибо.

Spirit_of_Stallman ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.