Я пытаюсь добавить ключ в ssh-agent
и хочу ssh-add
прочитать пароль из файла, используя. Как это возможно?
Как мне автоматизировать этот процесс из оболочки script?
Я пытаюсь добавить ключ в ssh-agent
и хочу ssh-add
прочитать пароль из файла, используя. Как это возможно?
Как мне автоматизировать этот процесс из оболочки script?
В зависимости от вашего дистрибутива и версии ssh-add вы можете или не использовать опцию -p
ssh-add, которая считывает кодовую фразу из stdin таким образом:
cat passfile | ssh-add -p keyfile
Если это не работает, вы можете использовать Expect, инструмент Unix, чтобы интерактивные приложения не были интерактивными. Вам нужно будет установить его из диспетчера пакетов.
Я написал инструмент для вас в ожидании. Просто скопируйте содержимое в файл с именем 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 $2)
expect << EOF
spawn ssh-add $1
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
- это, в основном, ваш script печать вашей кодовой фразы. См.: man ssh-add
.
Чтобы сделать его более безопасным (чтобы не хранить его в том же файле), используйте mktemp
для генерации случайного частного файла, сделайте его выполнимым (chmod
) и убедитесь, что он выдает кодовую фразу на стандартный вывод после выполнения.