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

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

  • Http proxy over ssh, а не носки
  • SSH туннель через два сервера для доступа к веб-службе на порту 9091
  • Как заставить OS X вернуть заголовок терминала в исходное название при возврате из ssh?
  • Каковы возможные проблемы безопасности с помощью SSH-демона?
  • Можно ли заставить SSH передавать пустые аргументы?
  • SSH по-прежнему запрашивает пароль после настройки проверки подлинности на основе ключа
  • SSH: выполнить команду sudo
  • Если я опечатаю свое имя пользователя при ssh-ing, есть ли способ вернуться и изменить его?
  • 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 
    Interesting Posts

    Почему локальные адреса обычно начинаются с 192.168?

    Как веб-сервер знает, используете ли вы прямой доступ к IP-адресу?

    Копирование файла только в том случае, если оно новее, чем место назначения

    Как запустить графический Emacs Mac OSX в режиме демона?

    Использование XAMPP, Ошибка 403 Доступ запрещен

    Как отключить параметр «Использовать шлюз по умолчанию для удаленных сетей» в Windows 10?

    Как я могу изменить значок приложения в Mac OS X?

    Почему числа с плавающей точкой неточны?

    Список файлов, рекурсивно показывающих только полный путь и размер файла из командной строки Windows

    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи

    Завершился ли DBAN, когда он покажет рекламу?

    WiFi-карта не была обнаружена Windows впервые после перезапуска с Ubuntu в режиме двойной загрузки

    Kali Linux не может найти компьютер в сети

    Как Robocopy определяет, «файл изменен»,

    При каких рабочих температурах мой gpu не только выживет, но и будет иметь долгую здоровую жизнь

    Давайте будем гением компьютера.