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

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

  • Почему запрос «пароль» берется навсегда, когда я использую SSH на своем сервере Ubuntu 9.05?
  • Может ли PuTTY открыть ссылку SSH, аналогичную терминалу для Macintosh?
  • Не удается получить доступ к виртуальной машине VMware через SSH
  • OS X Terminal Игнорирование настроек прокси-сервера SOCKS
  • Ошибка Putty X11 proxy: авторизация не распознана
  • Передавать информацию о соединении с клиента ssh на ssh-сервер
  • Как я могу использовать ssh для запуска команды на удаленном компьютере Unix и выйти до завершения команды?
  • SSH-туннель через 2 сервера
  • 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 
    Давайте будем гением компьютера.