У меня 2 сервера ( A
и B
), и мне нужно rsync файлы с A
на B
с правами root. Можно разрешить вход в систему по ssh root ( PermitRootLogin без пароля
), но я хотел бы максимально заблокировать его. Я использую ключи ssh, и (на B
) корневой ключ ssh (в /root/.ssh/authorized_keys
) ограничен до A
IP-адрес ( from = "xxxx ..."
).
Но как я могу заблокировать (этот ключ ssh) больше? Можно ли ограничить этот ключ ssh, чтобы разрешить только передачу rsync / файлов (и желательно ограничить его определенным каталогом)?
Исследование этого указывает на древние веб-страницы, на которых упоминается оболочка scponly
или ] rrsync
скрипт из rsync или rssh
из OpenSSH. Но как я могу настроить их только для этого ключа, не делая всю мою корневую учетную запись rssh
Не жесткое ограничение на тип доступа, но, возможно, добавьте пароль к вашему ключу, а затем используйте агент, чтобы добавить ключ в ваш сеанс. Таким образом, вам нужно будет разблокировать ключ только один раз за сеанс для доступа без пароля по ssh / scp / rsync. В случае кражи у него есть пароль, защищающий его от использования.
Создать ключ с парольной фразой
ssh-keygen -f mykeyfile
#make sure you add a passphrase when asked
Добавить ключ к агенту перед использованием SSH / SCP / RSYNC
ssh-add mykeyfile
#enter password here
rrsync
предназначен для использования в качестве принудительной команды для конкретного ключа, поэтому он должен быть именно тем, что вам нужно.
Принудительная команда настраивается с помощью опции command
для ключа в файле авторизованных ключей и затем всегда выполняется всякий раз, когда этот ключ используется для аутентификации, вне зависимости от того, какую команду запросил клиент. Но у него есть доступ к запрошенной команде, поэтому он может, например, реализовать проверенную, ограниченную версию и это то, что делает rrsync
.
Вы используете ее следующим образом:
command="/path/to/rrsync -wo /allowed/directory/",restrict,from="a.b.c.d" ecdsa-sha2-nistp521 AAAAE...
Доступ к этому ключу ограничен только rsync для /допустимая/директория/
.
Опция -wo
(только запись) означает, что rsync
будет разрешена только для передачи на удаленную машину, -ro
позволит только считывать с удаленной системы, не давая никакой опции, позволяющей передачу в обоих направлениях.
На локальной стороне, когда вы даете аргументы к rsync
, вы должны указать удаленный путь относительно разрешенного каталога, так что на A
вы бы сделали, например.
rsync -options /local/path root@B:
и not rsync -options /local/path root@B:/allowed/directory/
.
См. также этот ответ на другой, но связанный с ним вопрос.
.