Как установить переменные среды для удаленного процесса 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 
  • В чем разница между SCP и SFTP?
  • SSH аутентификация с открытым ключом не выполняется
  • Как сказать git, какой секретный ключ использовать?
  • Если я опечатаю свое имя пользователя при ssh-ing, есть ли способ вернуться и изменить его?
  • SSH для Cygwin медленно реагирует
  • Возможно ли / хорошая практика использовать один и тот же закрытый ключ для двух серверов для входа без пароля с одного и того же рабочего места / локального сервера?
  • Как я могу получить SSH в Windows, например, в Linux или OS X
  • Удаленный доступ emacs к моему основному компьютеру
  • Vim и мышь с ssh от Mac до Linux
  • Разрешения ssh и home directory
  • Влияет ли Heartbleed на ssh ключи?
  • Interesting Posts
    Давайте будем гением компьютера.