Могу ли я пересылать переменные env через ssh? - PullRequest
38 голосов
/ 10 декабря 2010

Я работаю с несколькими различными серверами, и было бы полезно иметь возможность устанавливать некоторые переменные среды так, чтобы они были активны на всех из них, когда я вхожу по SSH. Проблема в том, что содержимое некоторых переменных содержит конфиденциальные информация (хэшированные пароли), и поэтому я не хочу оставлять ее в файле .bashrc - я бы хотел сохранить ее только в памяти.

Я знаю, что вы можете использовать SSH для пересылки переменной DISPLAY (через ForwardX11) или процесса агента SSH (через ForwardAgent), поэтому мне интересно, есть ли способ автоматической пересылки содержимого произвольных переменных среды через соединения SSH , В идеале, что-то, что я мог бы установить в файле .ssh / config, чтобы он запускался автоматически, когда мне это нужно. Есть идеи?

Ответы [ 3 ]

33 голосов
/ 10 декабря 2010

Можно, но для этого необходимо изменить конфигурацию сервера.

Считать записи для AcceptEnv в sshd_config (5) и SendEnv в ssh_config (5).

update :

Вы также можете передать их в командной строке:

ssh foo@host "FOO=foo BAR=bar doz"

Что касается безопасности, обратите внимание, что кто-либо сдоступ к удаленной машине позволит увидеть переменные среды, переданные любому запущенному процессу.

Если вы хотите сохранить эту информацию в секрете, лучше передать ее через stdin:

cat secret_info | ssh foo@host remote_program
12 голосов
/ 10 декабря 2010

Вы не можете сделать это автоматически (за исключением $DISPLAY, который вы можете переслать с помощью -X вместе со своей информацией Xauth, чтобы удаленные программы могли фактически подключиться к вашему дисплею), но вы можете использовать скрипт с «здесь документом «:

ssh ... <<EOF
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH"
runRemoteCommand
EOF

Неэкранированные переменные будут расширены локально, а результат передан на удаленную сторону. Таким образом, PATH будет установлен с удаленным значением $HOME.

ЭТО РИСК БЕЗОПАСНОСТИ Не передавайте конфиденциальную информацию, такую ​​как пароли, таким образом, потому что любой может видеть переменные среды каждого процесса на одном компьютере.

0 голосов
/ 15 января 2019

Что-то вроде:

ssh user@host bash -c "set -e; $(env); . thescript.sh"

... может работать (не проверено)

Немного взлома, но если по какой-то причине вы не можете изменить конфигурацию сервераэто может сработать.

...