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

Проверка rsync через SSH authorized_keys command = «…»

Я пытаюсь проверить rsync через файл authorized_keys sshd.

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


Вот мой файл authorized_keys:

command="/home/username/Desktop/valrsync username" ssh-rsa AAAA [...]

Вот сценарий valrsync каждый раз по-разному:

Тест 1 -

$SSH_ORIGINAL_COMMAND

Вывод -

$ rsync [...] / username@remotemachine:/
/home/username/Desktop/valrsync: line 2: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]

И, что более важно, Тест 2 -

#!/usr/bin/python

import os
os.system(os.getenv('SSH_ORIGINAL_COMMAND'))

Вывод (запуск rsync с локального компьютера и получение вывода valrsync на удаленной машине) -

$ rsync [...] / username@remotemachine:/
sh: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]

Я понимаю, что rsync каким-то образом порождает свой экземпляр на удаленном компьютере, и, очевидно, этот экземпляр не упоминается, когда я пытаюсь выполнить команду rsync через сценарий. rsync не установлен на сервере, и я знаю, что этого не должно быть.

Теперь вопрос в том, что я могу с этим поделать (кроме, может быть, установки rsync на сервере ...?)

Вы получаете сообщение об ошибке rsync: command not found. Обычно это означает, что ваш $PATH переменная окружения установлена ​​неправильно. Используя свой первый тест, явно установите PATH чтобы включить каталог, в котором установлена ​​команда rsync. Например:

#!/bin/sh

PATH=/usr/local/bin:$PATH
export PATH

$SSH_ORIGINAL_COMMAND

Обязательно сделайте скрипт исполняемым (chmod 755 valrsync).

Все это предполагает, что rsync действительно установлен в целевой системе.

Лучшим методом, чем написание домашнего сценария, было бы использование rrsync, который в дистрибутивах на основе Debian вы уже должны были установить вместе с rsync в /usr/share/doc/rsync/scripts/rrsync.gz. В этом случае просто выполните следующую команду, чтобы распаковать сжатый скрипт в /usr/bin/rrsync:

gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c|sudo tee^Cusr/bin/rrsync && sudo chmod +x /usr/bin/rrsync

(когда уже запущен как root вы, очевидно, можете оставить sudo призывы)

Альтернативно скачать rrsync Вот.

Напоминание: имея rsync установлен на удаленном компьютере (тот, который authorized_keys файл) это предпосылка Вот.

Как только это будет сделано, вы можете просто добавить command= перед строкой с открытым ключом, вызывая rrsync.

Обычно вы включаете некоторые ограничительные параметры SSH вместе с command=, поэтому это может выглядеть так:

command="/usr/bin/rrsync -wo /data/backup/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ecdsa-sha2-nistp521 AAAAE...

Предоставляя этот каталог (вы можете использовать -ro только для чтения и -wo только для записи) вы можете оставить каталог на rsync призыв.

Таким образом, ваша командная строка станет rsync [...] / username@remotemachine: (обратите внимание на пропущенный путь после :).

Убедитесь, что у вас установлен rsync и указан путь к обоим концам (клиент и сервер). Клиент rsync использует SSH для выполнения rsync на удаленной (серверной) стороне. Вот так работает rsync.