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

Ограничить ключ ssh, чтобы разрешить только передачу rsync / файлов?

У меня 2 сервера (A & B), и мне нужны файлы rsync из A к B как корень. Возможно разрешение root ssh входа (PermitRootLogin without-password), но я бы хотел как можно больше его заблокировать. Я использую ssh-ключи, и (на B) корневой ключ ssh (в /root/.ssh/authorized_keys) ограничен AIP-адрес (from="x.x.x.x ...").

Но как я могу заблокировать (этот ssh-ключ) больше? Можно ли ограничить этот ключ ssh, чтобы разрешить только передачу rsync / файла (и предпочтительно ограниченный определенным каталогом)?

Изучив это, я обнаружил, что на древних веб-страницах упоминается scponly оболочка, или rrsync скрипт из rsync, или rssh из OpenSSH. Но как я могу настроить их только для этого ключа, не делая всю мою корневую учетную запись rssh 😉?

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

Принудительная команда настраивается с помощью command для ключа в файле авторизованных ключей и затем всегда запускается всякий раз, когда этот ключ используется для аутентификации, независимо от того, какую команду запросил клиент. Но у него есть доступ к запрошенной команде, поэтому он может, например, реализовать проверенную, ограниченную версию, и вот что rrsync делает.

Вы используете это так:

command="/path/to/rrsync -wo /allowed/directory/",restrict,from="a.b.c.d" ecdsa-sha2-nistp521 AAAAE...

Доступ для этого ключа ограничен rsync для /allowed/directory/ только. В -wo (только запись) означает, что rsync будет разрешено только отправить к удаленная машина, -ro позволит только читать из удаленная система, не предоставляя возможности, разрешила бы передачу в обоих направлениях.

На местной стороне, когда вы аргументируете rsync вы должны указать удаленный путь относительно разрешенного каталога и т. д. A вы бы сделали, например. rsync -options /local/path root@B: и не rsync -options /local/path root@B:/allowed/directory/.

Смотрите также этот ответ на другой, но связанный с этим вопрос.

Не жесткое ограничение на тип доступа, но, возможно, добавьте пароль к вашему ключу, а затем используйте агент, чтобы добавить ключ в ваш сеанс. Таким образом, вам нужно будет разблокировать ключ только один раз за сеанс для доступа без пароля по ssh / scp / rsync. В случае кражи у него есть пароль, защищающий его от использования.

Создать ключ с парольной фразой

ssh-keygen -f mykeyfile
#make sure you add a passphrase when asked

Добавьте ключ к агенту перед использованием SSH / SCP / RSYNC

ssh-add mykeyfile
#enter password here