Подтвердить что ты не робот

Как сделать ssh-add читать парольную фразу из файла?

Я пытаюсь добавить ключ в ssh-agent и хочу ssh-add прочитать пароль из файла, используя. Как это возможно?

Как мне автоматизировать этот процесс из оболочки script?

4b9b3361

Ответ 1

В зависимости от вашего дистрибутива и версии 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

Ответ 2

Ниже приведено обходное решение для систем, не поддерживающих -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) и убедитесь, что он выдает кодовую фразу на стандартный вывод после выполнения.