Использую Ubuntu 16.04 Написал собственный скрипт, который выполняет нужные мне команды на группе серверов.
В скрипте есть часть кода:
for serv in ${SERVERS[@]}
do
TEST=$(ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${SSH_USER}@${serv}.${HOST} "sudo su - root -c 'cat /root/test.txt'")
echo $TEST ====
done
Конечно, ${SSH_USER}
, ${serv}
и ${HOST}
заданы и скрипт отлично работает когда его выполнить так:
$ /bin/bash /path/to/script.sh
Но он должен запускаться каждый раз, когда я включаю ноутбук. Соответственно я решил написать свой systemd сервис для своего пользователя и положил его в .config/systemd/user/. Выглядит он так:
[Unit]
Description=service-name
After=multi-user.target
[Service]
Type=simple
EnvironmentFile=%h/.config/systemd/user/default/service-name
ExecStart=/bin/bash %h/${SCRIPT_DIR}/service-name
TimeoutSec=10
[Install]
WantedBy=default.target
Но сервис не работает, как задумывалось.
Когда я его запускаю вот так:
$ systemctl start --user service-name
сервис стартует, но скрипт не может выполнить вход на серверы.
В syslog такая картина:
ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
Permission denied, please try again.
Я думаю, проблема в том, что вход на серверы настроен через RSA-key, a мой RSA-key защищен при помощи passphrase.
И в этом случае мой ssh-agent, по каким-то причинам, не работает.
Я пытался экспортировать $SSH_AUTH_SOCK
в мой скрипт. Также пытался задать ее вручную. Увы, безуспешно.
Также, я не могу понять какой ssh-agent используется.
$ echo $SSH_AUTH_SOCK
/run/user/1000/keyring/ssh
но
$ps auSfx | grep [a]gent
user 1399 0.0 0.0 168036 592 ? Ss 12:34 0:00 \_ gpg-agent --homedir /home/user/.gnupg --use-standard-socket --daemon
и его сокет:
$lsof -p 1399
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gpg-agent 1399 user cwd DIR 8,5 4096 2 /
....
gpg-agent 1399 user 3u unix 0xffff96fcbde83c00 0t0 25282 /home/user/.gnupg/S.gpg-agent type=STREAM
я определял /home/user/.gnupg/S.gpg-agen
t как переменную SSH_AUTH_SOCK
, но в таком случае ключ не определяется вообще.
Вопросы:
- Как можно решить эту проблему?;
- Возможно есть путь лучше?
- Какой все-таки ssh-agent используется?
Спасибо.