кажется, мне нужно использовать модули 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 таким образом невозможно.