Linux 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Господа, возникла задача на некритичном участке отдавать агенту passphrase от ключа прямо в плейнтексте + добавить в rc.local. Короче говоря, чтобы юзеру вообще не пришлось вводить его при подключении к хостам.
Хотел воспользоваться expect для интерактивного ввода, но что-то пошло не так.
#!/bin/bash
if [ $# -ne 2 ] ; then
echo "Usage: addkey keyfile passfile"
exit 1
fi
eval `ssh-agent -s`
pass=$(cat $2)
expect << EOF
spawn ssh-add $1
expect "Enter passphrase"
send "$pass\r"
expect eof
EOF
В passfile лежит, собственно, валидный passphrase. После выполнения скрипта я вижу:
Agent pid 4038
spawn ssh-add /root/.ssh/key
Enter passphrase for /root/.ssh/key:
Identity added: /root/.ssh/key (/root/.ssh/key)
То бишь агент стартует и вроде как даже добавляется ключ. Но
root@:~# ssh-add -l
Could not open a connection to your authentication agent.
Причем агент-то висит
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4038 root 20 0 11232 336 0 S 0,0 0,0 0:00.00 ssh-agent
Так и вот, как скормить ключик агенту и почему данная реализация не работает?
Вангую, дело в окружении, в котором запускается агент, но у меня такое ощущение, что неделю назад это работало, хотя ручаться не буду.