Я прохожу курс “от 0 до Linux админа” на Yodo и столкнулся с проблемой: как автоматически запускать ssh-add
при старте оболочки и считывать парольную фразу из файла?
Наиболее подходящий рецепт, который мне удалось найти, состоит в следующем:
-
Создать файл скрипта:
#! /bin/bash if [ $# -ne 2 ]; then echo "Usage: ssh-add-passwd key_file passwd_file" exit 1 fi eval `ssh-agent` PASSWD=$(cat $2) expect << EOF spawn ssh-add $1 expect "Enter passphrase" send "$PASSWD\n" expect eof EOF
(авторство принадлежит этим обсуждениям)
-
Добавить команду для выполнения этого скрипта в
.bashrc
.
Команды выполняются успешно на первый взгляд, но возникает маленький нюанс: expect
порождает дочерний процесс, и так как ssh-agent
был запущен внутри него, он теряет все сохранённые пароли после завершения выполнения скрипта.
Я предлагаю следующий обходной путь:
- Убрать строку
eval \
ssh-agent`` из скрипта. - Добавить ту же строку в
.bashrc
перед выполнением скрипта.
Это, кажется, позволяет команде ssh-add
достичь уже запущенного ssh-agent
внутри дочернего процесса, что позволяет сохранить пароль.
Как вы думаете, мой обходной путь допустим?