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

Как выполнить rsync на удаленную машину с user1 для ssh и user2 в качестве удаленного rsyncer?

ОБНОВИТЬ:

кажется, мне нужно использовать модули rsync. Итак, я создал очень простой rsyncd.conf в доме пользователя user2 на удаленном сервере с помощью:

[test]
    path = /dest

Не получается, но проблема кажется другая. Когда я бегу

rsync -e "ssh -v -l user1" --delete-after -aX  /src/* user2@remote_host::test

ssh-соединение устанавливается user1 на этот раз, но я получаю такую ​​ошибку:

[...]
Bytes per second: sent 9093.3, received 12740.9
debug1: Exit status 1
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]

rsync путь на обоих серверах /usr/bin/rsync. В чем проблема?


Вопрос:

Сценарий: мне нужно выполнить rsync на удаленный сервер. Я могу войти на удаленный сервер, используя user1 (мой личный пользователь), но для чего-либо еще мне нужно перейти на user2 (технический пользователь). Я не могу использовать ssh напрямую с пользователем user2, так как у меня нет его пароля, а в доме user1 слишком мало свободного места. У меня нет открытых открытых портов, и единственная команда sudo, которую я могу запустить с user1, - sudo su - user2. Кроме того, исходная машина идентична удаленной.

Вопрос: Есть ли способ rsync на удаленный компьютер, используя user1 в качестве пользователя, открывающего ssh-соединение, и user2 в качестве пользователя, запускающего удаленный rsync?

Я попытался

rsync -e "ssh -l user1" --delete-after -aX  /src/* user2@remote_host:/dest

но он все равно пытается использовать user2 как пользователя ssh.

С участием

rsync -e "ssh -l user2" --delete-after -aX  /src/* user1@remote_host:/dest

удаленный rsync использует user1 и не может писать в каталогах user2.

Из man rsync:

USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION
       It is sometimes useful to use various features of an rsync daemon 
       (such as named modules) without actually allowing  any  new  socket 
       connections into a system [...] Rsync supports connecting to a host 
       using a remote shell and then  spawning  a  single-use “daemon” 
       server that expects to read its config file in the home dir of the 
       remote user. [...]  since the daemon is started up fresh by the 
       remote  user,  you  may  not  be able to use features such as 
       chroot or change the uid used by the daemon. 

       [...]

       If  you  need to specify a different remote-shell user, keep in 
       mind that the user@ prefix in front of the host is specifying the 
       rsync-user value (for a module  that  requires  user-based  
       authentication).   This means  that you must give the ’-l user’ 
       option to ssh when specifying the remote-shell, as in this example
       that uses the short version of the --rsh option:

           rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest

       The “ssh-user” will be used at the ssh level; the “rsync-user” will 
       be used to log-in to the “module”.

Мне кажется, что я чего-то не понимаю «под капотом».

ОБНОВИТЬ:

Может быть, можно использовать --rsync-path="sudo su -l user2 -c rsync" или --rsync-path="sudo -u user2 rsync"? Попробую в понедельник.


ОТВЕТ:

Ладно, похоже, это невозможно. Любые обходные пути с другими методами / инструментами приветствуются.

Последнее решение, которое я нашел, - это иметь rsync.conf файл под user1 дома так:

[iog]
    path = /dest

и запустить с локального сервера:

rsync -v --rsync-path="rsync --log-file=/tmp/rlog --config=/home/user1/rsync.conf"  \
      -e "ssh -v -l user1" --delete-after -aX /src/* user2@host::test

Возвращенная ошибка

debug1: Sending command: rsync --log-file=/tmp/rlog --config=/home/user1/rsync.conf \
                               --server --daemon .
@ERROR: chroot failed

Из man rsync:

USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION
       [...] since the daemon is started up fresh by the 
       remote  user,  you  may  not  be able to use features such as 
       chroot or change the uid used by the daemon.

Так что, похоже, в моих условиях использовать rsync таким образом невозможно.