Я пытаюсь проверить 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.