Как сделать ssh-добавить пароль для чтения из файла?
Я пытаюсь добавить ключ ssh-agent
и хочу!--1--> чтение пароля из файла с помощью. Как это возможно?
Как автоматизировать этот процесс из сценария оболочки?
3 ответов
в зависимости от вашего дистрибутива и версии ssh-add вы можете использовать или не использовать -p
опция ssh-add, которая читает парольную фразу из stdin таким образом:
cat passfile | ssh-add -p keyfile
если это не работает, вы можете использовать ожидал, инструмент Unix, чтобы сделать интерактивные приложения неинтерактивными. Вам придется установить его из диспетчера пакетов.
я написал инструмент для вас в expect. Просто скопируйте содержимое в файл с именем ssh-add-pass и установить исполняемые разрешения на него (chmod +x ssh-add-pass
). Вы также можете скопировать его в /usr /bin или/usr/local / bin для доступа из поиска $PATH.
#!/bin/bash
if [ $# -ne 2 ] ; then
echo "Usage: ssh-add-pass keyfile passfile"
exit 1
fi
eval $(ssh-agent)
pass=$(cat )
expect << EOF
spawn ssh-add
expect "Enter passphrase"
send "$pass\r"
expect eof
EOF
использование просто:ssh-add-pass keyfile passfile
вот некоторые обходные пути для систем, не поддерживающих -p
:
$ PASS="my_passphrase"
$ install -vm700 <(echo "echo $PASS") "$PWD/ps.sh"
$ cat id_rsa | SSH_ASKPASS="$PWD/ps.sh" ssh-add - && rm -v "$PWD/ps.sh"
здесь ps.sh
в основном ваш скрипт печатает вашу парольную фразу. См.: man ssh-add
.
чтобы сделать его более безопасным (чтобы не держать его в одном файле), используйте mktemp
чтобы создать случайный частный файл, сделайте его исполняемым (chmod
) и убедитесь, что он печатает парольную фразу на стандартный вывод после выполнения.
похоже на ответ kenorb, но не сохраняет секрет в файле:
$ SSH_ASKPASS=/path/to/ssh_give_pass.sh ssh-add $KEYFILE <<< "$KEYPASS"
где ssh_give_pass.sh есть:
#!/bin/bash
# Parameter passed to the script is the prompt text
# READ Secret from STDIN and echo it
read SECRET
echo $SECRET
Если у вас есть секрет в файле $ KEYPASS, сначала прочитайте его в переменную с
KEYPASS=`cat $KEYPASSFILE`
также убедитесь, что ssh_give_pass.sh не редактируется неавторизованными пользователями - будет легко регистрировать все секреты, переданные через скрипт.