Как установить переменные среды для удаленного процесса rsync?

Когда я использую rsync для копирования файлов с одного компьютера на другой, процесс rsync запускается с обоих концов. Однако на удаленном конце файлы инициализации оболочки, по-видимому, не читаются, поэтому я не могу настроить переменные среды для удаленного процесса rsync. К сожалению, для работы rsync требуется один сервер, для которого rsync требует переменную среды для работы. Я не администратор на сервере, поэтому я не могу изменить глобальную конфигурацию. Что я могу сделать, чтобы установить переменные среды для удаленного процесса rsync?

One Solution collect form web for “Как установить переменные среды для удаленного процесса rsync?”

~/.profile обычно не читается при запуске ssh somecommand , в отличие от интерактивного сеанса ssh (или другого метода входа в систему, в котором вы начинаете интерактивный сеанс).

Ssh поддерживает отправку переменных окружения. В OpenSSH используйте директиву SendEnv в ~/.ssh/config . Однако конкретная переменная среды должна быть включена с помощью директивы AcceptEnv в конфигурации сервера , так что это может не сработать для вас.

OpenSSH также позволяет устанавливать переменные среды на стороне сервера. Опять же, это должно быть включено в конфигурации сервера, здесь с директивой PermitUserEnvironment . Переменные можно установить в файле ~/.ssh/environment . Предполагая, что вы используете аутентификацию с открытым ключом, вы также можете установить переменные с ключом в ~/.ssh/authorized_keys : добавить environment="FOO=bar" в начале соответствующей строки.

Одна вещь, которая, как мне кажется, всегда работает (как ни странно), пока вы используете аутентификацию с открытым ключом, – это (ab) использовать параметр command= в файле authorized_keys . Ключ с параметром command хорош только для запуска указанной команды; Но команда в файле authorized_keys выполняется с переменной среды SSH_ORIGINAL_COMMAND установленной для указанной пользователем (пустой для интерактивных сеансов). Таким образом, вы можете использовать что-то вроде этого в ~/.ssh/authorized_keys (конечно, оно не будет применяться, если вы не используете этот ключ для аутентификации):

 command="export LD_LIBRARY_PATH=\"$HOME\"/lib; if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then eval \"$SSH_ORIGINAL_COMMAND\"; else exec \"$SHELL\"; fi" ssh-rsa … 

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

Другая возможность – написать на сервере сценарий оболочки ~/bin/rsync-wrapper , что-то вроде

 #!/bin/sh . ~/.profile exec rsync "$@" 

Затем передайте --rsync-path='bin/rsync-wrapper' в командной строке rsync . Аргумент для --rsync-path расширяется оболочкой, поэтому, если вы предпочитаете, вы можете сделать командную строку rsync самодостаточной, передав что-то вроде --rsync-path='. ~/.profile; rsync' --rsync-path='. ~/.profile; rsync' --rsync-path='. ~/.profile; rsync' .

Существует еще одна авеню, которая зависит от вашей оболочки входа в bash или zsh. Bash всегда читает ~/.bashrc когда он вызывается rshd или sshd, даже если он не является интерактивным (но не если он называется sh ). Зш всегда читает ~/.zshenv .

 ## ~/.bashrc if [[ $- != *i* ]]; then # Either .bashrc was sourced explicitly, or this is an rsh/ssh session. . ~/.profile fi ## ~/.zshenv if [[ $(ps -p $PPID -o comm=) = [rs]shd && $- != *l* ]]; then # Not a login shell, but this is an rsh/ssh session . ~/.profile fi 
  • Маршрутизатор перехватывает туннель SSH?
  • Как предотвратить очистку вывода терминала при выходе из сеанса SSH?
  • Scp между двумя удаленными хостами от моего (третьего) компьютера
  • SHA256 ssh отпечаток пальца, выданный клиентом, но только отпечаток md5, известный серверу
  • В Linux я могу сохранить программу в фоновом режиме даже после отключения?
  • Как я могу перенаправить gpg-ключ через ssh-agent?
  • Пересылка определенных портов через реверсовые туннели SSH
  • Невозможно получить переменную профиля с помощью ssh
  • Каков наилучший способ выполнения ежедневных / еженедельных / ежемесячных резервных копий?
  • Как я могу туннелировать весь свой сетевой трафик через SSH?
  • Почему мой .bashrc читается, когда я запускаю неинтерактивные команды по ssh
  • Странное поведение NS в OS X - невозможно подключиться к SSH-серверу
  • Давайте будем гением компьютера.