ssh не работает при вызове из systemd

1

Я пытаюсь написать скрипт для rsync папки на моем ноутбуке на моем NAS. Скрипт работает нормально при вызове из командной строки. Я попытался настроить скрипт для автоматического запуска с systemd. Однако есть проблема с логином ssh. Хотя он работает нормально, когда скрипт запускается из командной строки, я получаю сообщение об ошибке «Отказано в доступе».

Вот что я пытался пока сузить проблему:

Сценарий /home/tikey/scripts/nas_sync_photos_to_nas.sh:

#!/bin/bash
set -x
ssh tikey@192.168.17.200 -v -i /home/tikey/.ssh/id_rsa ls -la rsync_laptop

Чтобы запустить скрипт с помощью systemd, я поместил файл sync-photos-to-nas.serviceв ~/.config/systemd/user/:

[Единица измерения]
Описание = синхронизировать Bilder с NAS
[Обслуживание]
ExecStart = / дом / Tikey / скрипты / nas_sync_photos_to_nas.sh

Запуск скрипта из командной строки работает нормально. К сожалению, запуск сценария с помощью systemd не работает. Я запустил сервис systemd с systemctl --user start sync-photos-to-nas.service. Затем, используя journalctl --user-unit sync-photos-to-nas, я получаю:

...
debug1: Хост «192.168.17.200» известен и соответствует ключу хоста RSA.
debug1: найден ключ в /home/tikey/.ssh/known_hosts:2
debug1: повторный ввод после 4294967296 блоков
debug1: отправлено сообщение SSH2_MSG_NEWKEYS
debug1: ожидается SSH2_MSG_NEWKEYS
debug1: повторный ввод после 4294967296 блоков
debug1: SSH2_MSG_NEWKEYS получено
debug1: SSH2_MSG_SERVICE_ACCEPT получено
debug1: аутентификации, которые могут продолжаться: publickey, пароль, клавиатура-интерактив
debug1: следующий метод аутентификации: publickey
debug1: предложение открытого ключа RSA: /home/tikey/.ssh/id_rsa
debug1: сервер принимает ключ: pkalg ssh-rsa blen 535
debug1: read_passphrase: невозможно открыть / dev / tty: такого устройства или адреса нет
debug1: следующий метод аутентификации: клавиатура-интерактив
debug1: аутентификации, которые могут продолжаться: publickey, пароль, клавиатура-интерактив
debug1: следующий метод аутентификации: пароль
debug1: read_passphrase: невозможно открыть / dev / tty: такого устройства или адреса нет
debug1: аутентификации, которые могут продолжаться: publickey, пароль, клавиатура-интерактив
В доступе отказано, пожалуйста, попробуйте еще раз.
debug1: read_passphrase: невозможно открыть / dev / tty: такого устройства или адреса нет
debug1: аутентификации, которые могут продолжаться: publickey, пароль, клавиатура-интерактив
В доступе отказано, пожалуйста, попробуйте еще раз.
debug1: read_passphrase: невозможно открыть / dev / tty: такого устройства или адреса нет
debug1: аутентификации, которые могут продолжаться: publickey, пароль, клавиатура-интерактив
debug1: больше не нужно проверять методы аутентификации.
sync-photos-to-nas.service: основной процесс завершен, код = выход, статус = 255 / n / a
sync-photos-to-nas.service: устройство вошло в состояние сбоя.
sync-photos-to-nas.service: не удалось с результатом 'код выхода'.

Кто-нибудь знает, в чем может быть проблема?

Томас
источник

Ответы:

4

debug1: read_passphrase: невозможно открыть / dev / tty: такого устройства или адреса нет

В журнале говорится, что ваш закрытый ключ зашифрован, и клиент не может использовать его, пока вы не введете ключевую фразу. Либо используйте незашифрованный ключ, либо снова используйте грязный обходной путь, используя sshpass.

Jakuje
источник
Забыли об этом. Ключ автоматически разблокируется при входе в систему, но, видимо, не для systemd.
Томас
Потому что это другой пользователь, у которого есть ключ / связка ключей, поэтому он не разблокирован, так как у systemd нет интерактивной сессии, запущенной
Alfabravo
0

Согласно man ssh, ваш аргумент неправильный в вашем вызове SSH. У вас есть это:

ssh tikey@192.168.17.200 -v -i /home/tikey/.ssh/id_rsa ls -la rsync_laptop

Но в «Синопсисе» из man sshэтого показано, что все параметры должны идти перед «user @ host», поэтому попробуйте это:

 ssh -v -i /home/tikey/.ssh/id_rsa tikey@192.168.17.200 ls -la rsync_laptop

Другие детали вашей конфигурации systemd выглядят разумно.

Марк Стосберг
источник
На практике это на самом деле не имеет значения, пока команда, которая должна быть запущена, приходит в конце. Попробуйте это:, ssh myhost -vкоторый включит аргумент -v даже после объявления хоста.
Джеймисон Беккер
@JamiesonBecker сейчас это может не иметь значения, но если вы не следуете документированному способу использования SSH, тогда не ожидайте никакой гарантии будущей поддержки недокументированного поведения.
Марк Стосберг
.. но это не ответ. Или, по крайней мере, не ответ на вопрос, который задавал ОП. :)
Джеймисон Беккер
0

debug1: read_passphrase: невозможно открыть / dev / tty: такого устройства или адреса нет

В журнале говорится, что ваш закрытый ключ зашифрован, и клиент не может использовать его, пока вы не введете ключевую фразу. Как вы говорите в своем комментарии "Ключ автоматически разблокируется при входе в систему, но, видимо, не для systemd"

Чтобы убедиться, что это сделано, вам нужно выполнить скрипт, как если бы вы вошли под своим логином.

[Unit]
Description=sync Bilder to nas
[Service]

User=YOURUSERNAME
WorkingDirectory=/home/YOURUSERNAME
ExecStart=bash -l -c "/home/tikey/scripts/nas_sync_photos_to_nas.sh"

от man bash:

-c string        If  the  -c  option  is  present, then commands are read from
                 string.  If there are arguments after the  string,  they  are
                 assigned to the positional parameters, starting with $0.

-l               Make bash act as if it had been invoked as a login shell (see
                 INVOCATION below).

от man systemd.exec:

User=, Group=    Set the UNIX user or group that the processes are executed as,
                 respectively. Takes a single user or group name, or a numeric 
                 ID as argument. etc...
Игорь Вольтаик
источник