LINUX.ORG.RU
ФорумAdmin

Скормить ключ и passphrase ssh-агенту с помощью expect

 ,


0

1

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

Так и вот, как скормить ключик агенту и почему данная реализация не работает?

Вангую, дело в окружении, в котором запускается агент, но у меня такое ощущение, что неделю назад это работало, хотя ручаться не буду.

Если не критично, то зачем такие сложности? Просто убрать пароль с ключа не вариант?

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Просто убрать пароль с ключа не вариант?

К сожалению, нет (другие должны подключаться по этому же ключу с ручным вводом пароля). Да и хочется разобраться, почему не работает (и как сделать так, чтобы работало)

mammuthus ()
Ответ на: комментарий от mammuthus

другие должны подключаться по этому же ключу с ручным вводом пароля

Сгенери этим другим отдельные пары ключей (или одну на всех других, но отдельную от первого), и пусть вводят пароли вручную.

dexpl ★★★★★ ()
Ответ на: комментарий от mammuthus

но а если с использованием мэдскиллз в виде expect

…, то это, увы, не ко мне — я так до сих пор не освоил expect.

dexpl ★★★★★ ()

То бишь агент стартует и вроде как даже добавляется ключ. Но
Причем агент-то висит
Так и вот, как скормить ключик агенту и почему данная реализация не работает?

Переменные окружения есть?
Как кто может узнать что запущен ssh-agent?

echo $SSH_AUTH_SOCK
/run/user/1000/keyring-6h2hen/ssh

echo $SSH_AGENT_PID
5118

Можно добавить в .bashrc что-нить вроде:

# ---------- ssh-agent --------------------
if ( pgrep -f ssh-agent > /dev/null )  then
# ssh-agent уже запущен
 if [ -z $SSH_AUTH_SOCK ];  then
 my=`whoami`
   # переменные окружения не определены
   d=$(ls -d /tmp/`ls -al /tmp/ | grep ssh- | grep "$my" | awk '{print $9}' |head -n 1`/)
   f=`ls -1 $d/`;

   export SSH_AUTH_SOCK=$d$f
   export SSH_AGENT_PID=`pgrep -f '/usr/bin/ssh-agent'`

 fi
else # нет процесса - стартуем
/usr/bin/ssh-agent
fi

И будет счастье. А вообще, я бы сделал отдельные (разные) ключи разным пользователям.

rootFS ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.