systemd, которому нужен пароль .ssh / id_dsa

У меня есть служба systemctl, которая запускает процесс smd-loop в сеансе screen . Этот процесс требует доступа к удаленным SSH-источникам (для синхронизации) и, следовательно, должен иметь доступ к моему id_dsa ключу id_dsa .

Как настроить службу systemd так, чтобы она работала? Следующая служба запускает процесс правильно, но мне требуется прикрепить сеанс экрана и id_dsa пароль id_dsa вручную.

 [Unit] Description=smd loop After=local-fs.target network.target [Service] User=%i Group=users Type=Forking ExecStart=/usr/bin/screen -S smd-loop-win -md "smd-loop" RemainAfterExit=yes 

Когда я вручную запускаю smd-loop пароль id_dsa не требуется, так как я pam_ssh модуль pam_ssh который запускает ssh-agent который содержит пароль при входе в систему.

3 Solutions collect form web for “systemd, которому нужен пароль .ssh / id_dsa”

Вам необходимо поместить файлы идентификаторов, содержащие не зашифрованный закрытый ключ, в ~/.ssh пользователя, с которым работает служба. Кроме того, вам нужно установить для него переменную среды HOME, например, если она запущена с правами пользователя root:

 ExecStart=/usr/bin/env HOME=/root /usr/bin/screen -S smd-loop-win -md "smd-loop" 

В качестве альтернативы, если у вас есть контроль над тем, как smd-loop вызывает ssh вы можете добавить параметр -I чтобы сообщить ssh файл идентификатора для использования.

В любом случае файл идентификации должен принадлежать этому пользователю и должен быть доступен только этому пользователю ( chmod 0400 ~/.ssh/id* ).

Я бы сгенерировал собственный ssh-ключ без кодовой фразы для этой службы.

В целевой системе (-ах) я тогда использовал бы «command =» в authorized_keys, чтобы ограничить использование этого ключа одной командой.

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

Если вам нужно только, чтобы служба работала во время входа в систему, подключите ее к ssh-agent который вы начинаете с вашего сеанса. Самый простой способ сделать это – использовать фиксированный путь для сокета агента. Установите SSH_AUTH_SOCK среды SSH_AUTH_SOCK на что-то вроде /home/romeovs/.ssh/darkstar.agent.socket как в /home/romeovs/.ssh/darkstar.agent.socket systemd, так и в вашем .profile . Обратите внимание: если ваш дистрибутив запускает процесс ssh-agent для вас, возможно, вам придется его убить или оставить его неиспользованным и заменить его своим. Если переменная SSH_AUTH_SOCK присутствует в среде, ssh-agent использует путь, который он содержит для своего сокета. Затем, когда вы входите в систему, запустите ssh-add на свой закрытый ключ, и работа сможет его использовать.

Если вам нужно постоянно работать с работой, я рекомендую создать для этой цели специальный ключ без пароля ( ssh-keygen -t rsa -f ~/.ssh/smd.id_rsa -N '' ) и разрешить его только для выполните определенную команду на сервере, используя command= и from= ограничения в файле ~/.ssh/authorized_keys на сервере. Параметр from= означает, что ключ действителен только для попыток входа с определенных хостов, а command= указывает команду, которая выполняется вместо команды, указанной клиентом.

ssh-rsa AAAA…== romeovs@darkstar no-agent-forwarding no-port-forwarding no-x11-forwarding from="romeovs@darkstar.example.com" command="somecommand --foo"

Команда выполняется вашей оболочкой входа. Если вам нужно передать параметры этой команде, у вас есть два варианта:

  • Первоначальная команда, предпринятая клиентом, находится в переменной среды SSH_ORIGINAL_COMMAND . Остерегайтесь цитирования вопросов, если вы попытаетесь разобрать его.
  • Клиентом передается несколько переменных среды. Точный набор зависит от конфигурации сервера (директива AcceptEnv в файле sshd_config ).
  • Systemd ломает usbmount
  • Ошибка запуска Debian 9: `Не удалось запустить Raise network interfaces`
  • Umount сетевые диски с системойd перед выключением
  • Для пользователя udev и systemd интеграции с X?
  • Ноутбук спит сам по себе - в журналах «Сон запросил» - запросил что?
  • Невозможно установить адрес mac для вызова интерфейса с помощью systemd-networkd
  • использование таймеров systemd вместо cron
  • Как начать использовать httpd с активацией сокета (systemd)?
  • Могу ли я задержать запуск скрипта systemd при загрузке?
  • Как включить несколько файлов unitd с одним и тем же спецификатором экземпляра?
  • Как предотвратить Pulseaudio при сбое при запуске виртуальной машины из VirtualBox?
  • Linux и Unix - лучшая ОС в мире.