Назад | Перейти на главную страницу

установка пароля для cron rsync через ssh

Я пишу сценарий bash, который будет вызываться из cron для извлечения файла с удаленного сервера один раз в день. Я использую SSH, поэтому мне нужно автоматически вводить пароль, поскольку он работает без присмотра. Вот что я до сих пор придумал:

1: создать пару ключей DSA через ssh-keygen
2: скопируйте открытый ключ на удаленный сервер
3: настроить ssh-agent иметь дело с ключевой парольной фразой

У меня вопрос: Все это нужно? Это самый простой / лучший подход? Это действительно простая задача, поэтому я хотел бы максимально упростить настройку, сохранив при этом разумный уровень безопасности.

Дополнительная информация:
-не запущен демон rsync
-обе машины - Ubuntu linux

Все, что вы делаете, будет небезопасным без использования ssh и sshd.

Канонический способ - использовать scp или даже лучше, rsync и ключ ssh без пароля.

В качестве альтернативы создайте ключ, используемый только для копирования, и на удаленном конце отредактируйте файл authorized_keys, чтобы он содержал только команду (ы), которые вам нужно запустить, и ключ, например:

# remote_server:/home/copyuser/.ssh/authorized_keys:
command="[...]" ssh-rsa KEY_HERE user@host

А также есть scponly доступный. Если вы создаете пользователя, установите его оболочку в /etc/passwd к /usr/bin/scponly и им не будет разрешено входить в систему, но они будут копировать файлы туда и обратно в соответствии с обычными разрешениями.

Хотя я полагаю, ты мог используйте закрытый ключ, защищенный парольной фразой, что обычно не рекомендуется для процессов, которые предназначены для запуска через cron. Я бы рекомендовал пропустить парольную фразу, а затем убедиться, что у любой учетной записи пользователя, которую вы используете, только очень ограниченные привилегии в целевом поле. Пропустив кодовую фразу, вам не придется возиться с ssh-agent.

Вот мои рекомендации:

  • Создайте определенный набор открытых / закрытых ключей SSH для этого задания cron. Используйте: ssh-keygen -t rsa -N '' -f id_cronjobname
  • Защитите полученный файл id_cronjobname так, чтобы его могло прочитать только задание cron. Если этот файл скомпрометирован, любой, у кого есть этот ключевой файл, потенциально может получить те же привилегии.
  • Ограничьте использование этого ключа на удаленном конце. Например, в удаленных authorized_keys вы можете добавить префикс ключа в примере ниже.
  • Также рассмотрите возможность использования «from» для ограничения IP-адреса в файле authorized_keys. См. "Man sshd" для получения дополнительной информации об этих ограничениях.

Пример строки из удаленного файла authorized_keys:

no-pty,no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command="rsync --server --sender -vlogDtprze.i --ignore-errors --numeric-ids --inplace . /path/on/destination/system" ssh-rsa SSH_KEY_STRING user@host"

Точную команду для ввода вы можете получить, запустив команду rsync, которую вы планируете использовать, а затем одновременно в удаленной системе выполните «ps awwlx | grep rsync».

ПРИМЕЧАНИЕ. Одна из распространенных проблем, с которыми я сталкиваюсь, заключается в том, что при запуске задания cron отсутствует SSH-ключ удаленного хоста, поэтому он пытается спросить, в порядке ли соединение. Убедитесь, что вы поместили ключ хоста SSH удаленной системы в / etc / ssh / ssh_known_hosts (возможно, просто скопируйте его из своего собственного файла ~ / .ssh / known_hosts после подключения). В качестве альтернативы вы можете выполнить «su - $ USER_CRONJOB_RUNS_AS», а затем вручную вызвать команду и убедиться, что она работает. Кроме того, это хорошо для проверки работы.

На шаге 1 (создание ключей), когда вас попросят перефразировать, вы должны сразу нажать Enter - у вас будет пара ключей без перефразирования, затем вы можете пропустить шаг 3 (настроить ssh-agent).

С точки зрения безопасности, в этой настройке, если ваш ssh-клиент будет скомпрометирован, тогда ssh-сервер (с которого вы тянете) также станет открытым для злоумышленника (как не root, если вы не входите в систему как root). Это не большая проблема, и это довольно распространенный способ работы. Но старайтесь периодически делать обновления безопасности в своих системах Ubuntu.

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

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

После того, как вы настроите пару ключей без пароля (скопируйте ключ pub в ~ / .ssh / autorized_keys на сервере), rsync будет без каких-либо дополнительных опций, как ssh и scp.