На этот вопрос уже есть ответ здесь:
Как передать значение в команду ssh, чтобы среда, запускаемая на хост-компьютере, запускалась с определенной переменной среды, выбранной по моему выбору?
РЕДАКТИРОВАТЬ: цель состоит в том, чтобы передать текущий рабочий стол kde (из dcop kwin KWinInterface currentDesktop) в новую созданную оболочку, чтобы я мог передать nfs-местоположения моему экземпляру JEdit на исходном сервере, который уникален для каждого рабочего стола KDE. (Используя такой механизм, как emacsserver / emacsclient )
Причина, по которой несколько экземпляров ssh могут быть запущены одновременно, заключается в том, что когда я настраиваю свою среду, я открываю кучу разных экземпляров ssh для разных машин.
источник
SendEnv
Вариант ваш парень.~ / .ssh / config: (локально)
/ etc / ssh / sshd_config: (на удаленном конце)
Теперь, каким бы ни было
$MYVAR
локальное значение , оно становится доступным и в удаленном сеансе.Если вы входите в систему несколько раз, у каждого сеанса будет своя копия
$MYVAR
, возможно с разными значениями.~/.ssh/environment
предназначен для других целей. Он действует как$ENV
файл при удаленном выполнении команд без оболочки .источник
ssh myserver -o SendEnv="MYVAR"
, так что вы можете сделать его динамическим в сценариях.Вы можете передавать значения с помощью команды, аналогичной следующей:
Вы можете проверить с:
На tcsh похоже следующее работает:
источник
&&
). Использование bashexport VAR=value;
вместо setenv в третьем виде работает для этого случая.ssh user@host "$(<env_to_source.sh) command ..."
. В env к источнику у меня естьexport var=value ;
отдельные строки (помните точку с запятой).Там также ужасный, ужасный взлом.
Если ваш сценарий потребляет переменную на удаленном конце (то есть вы можете назвать ее как угодно), вы можете использовать переменные локали. Любая переменная формы LC_ * будет передана дословно, без каких-либо требований к конфигурации.
Например, у нас есть ряд бастионных серверов на одном из моих клиентов. Я ненавижу подключаться к нему, просто подключаться к другому серверу ... и другому серверу ... каждый раз. У меня есть скрипт, который ведет себя так же, как SSH, за исключением того, что он умный.
По сути, если установлен LC_BOUNCE_HOSTS, он разбивает его на пробелы и снимает первый хост. Затем он прыгает и запускает тот же сценарий. На конечном узле этот список в конечном итоге пуст, поэтому он запускает команду. У меня также есть режим отладки (который отлично подходит во время сетевых проблем), который устанавливается LC_BOUNCE_DEBUG. Поскольку ssh магически передает все это мне, мне не нужно ничего делать, кроме как распознать конец списка хостов (что я делаю с опцией -).
Я чувствую себя грязным каждый раз, когда использую это, но это работает везде, где я пробовал.
источник
ProxyCommand
опции OpenSSH ? Отредактируйте свой~/.ssh/config
и добавьте блок какHost *.example.com: ProxyCommand -ssh -W %h:%p bastionhost
и позвольте ему туннелировать ваши соединения для васНа Bash я проверил с:
источник