Почему ssh-nq-t не видят моей переменной среды?

Я написал электронное письмо администратору веб-сайтов, и:

https://www.scientificlinux.org/distributions/6x/61/

они обновили хеши!!:)

x86_64:
README x86_64 ISO Images
SL-61-x86_64-2011-07-27-boot.iso - sha1sum - cc2ef3a14493910c31598bf78c3523f722f6494e
SL-61-x86_64-2011-11-09-Everything-DVD1.iso - sha1sum - 3a6976c48cbad8a0e16ef902b176d5bc8e57b2c5
SL-61-x86_64-2011-07-27-Everything-DVD2.iso - sha1sum - 0dd829f14bd32be0bb6be5feedfd97062fe45b58
SL-61-x86_64-2011-11-09-Install-DVD.iso - sha1sum - fdd8bf7c0f80522015251137696676eb63a835bd
SL-61-x86_64-2011-07-27-LiveCD.iso - sha1sum - 2d9d09dc391c8283612adcde931029a327f6fe55
SL-61-x86_64-2011-07-27-LiveDVD.iso - sha1sum - 5fb0f7c94ca33f418eb64a64afad034dc6ab6037
SL-61-x86_64-2011-07-27-LiveMiniCD.iso - sha1sum - b1d528120e839f542c29e54b95780d48f7bde6d8 

1
15.04.2013, 12:05
1 ответ

Править

Информация ниже допустима если Вы ssh в машину и затем выполненный Ваша команда, которая запускает оболочку входа в систему:

ssh root@ip
echo $XXXX_LICENSE_FILE

При попытке получить доступ к переменной непосредственно от ssh команда (ssh root@ip echo $XXXX_LICENSE_FILE) затем Вы запускаете невход в систему, неинтерактивная оболочка, в этом случае ни один ~/.bash_profile ни ~/.bashrc читаются. От bash страница справочника:

   When bash is started non-interactively, to run a shell script,
   for  example,  it looks for the variable BASH_ENV in the envi‐
   ronment, expands its value if it appears there, and  uses  the
   expanded  value  as  the  name  of a file to read and execute.
   Bash behaves as if the following command were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to  search  for
   the file name.

Самое легкое обходное решение должно было бы просто объявить переменную наряду с ssh команда. Чтобы это работало, необходимо добавить эту строку к удаленному /etc/ssh/sshd_config файл:

PermitUserEnvironment yes

Затем выполните это от локальной машины:

XXXX_LICENSE_FILE=/etc/xxxx.lic && ssh -nq -t -t -t root@$ip /etc/init.d/xxxx.rc start

Проблемой здесь является различие между входом в систему и интерактивными оболочками. Посмотрите здесь для хорошей сводки.

~/.bashrc только читается при запуске интерактивного (невход в систему) оболочка. Когда Вы sshв удаленную машину Вы выполняете оболочку входа в систему так ~/.bash_profile или ~/.bash_login или ~/.profile (в том порядке), читаются вместо этого. Можно проверить это путем выполнения bash после вхождения в систему удаленного сервера, который запустит интерактивную оболочку, ~/.bashrc будет считан и Ваша переменная среды будет установлена.

Для фиксации этого определите переменную в Вашем ~/.bash_profile вместо ~/.bashrc.


Я предполагаю, что Вы устанавливаете переменную в удаленном .bashrc, не Ваш локальный. Если Вы хотите экспортировать локальную переменную ssh, взгляните на ссылку, отправленную Frederik Deweerdt. Самый легкий путь состоял бы в том, чтобы включать Вашу переменную в вызов ssh:

ssh -nq -t root@ip "FOO=foo BAR=bar"
1
27.01.2020, 23:54
  • 1
    Даже после определения переменной в .bash_profile система не может найти переменную. –  Patryk 07.05.2013, 17:48
  • 2
    @Patryk объясните точно, что Вы делаете. Как переменная определяется и где (локальный .bash_profile, или удаленный?) и как Вы пытаетесь получить доступ к его содержанию. Удаленный удар оболочки? –  terdon♦ 07.05.2013, 18:46
  • 3
    у меня есть переменная оба в .bashrc и .bash_profile определенный следующим образом export XXXX_LICENSE_FILE=/etc/xxxx.lic, затем я имею в сценарии ssh -nq -t -t -t root@$ip /etc/init.d/xxxx.rc start –  Patryk 08.05.2013, 09:33
  • 4
    OK. Вы имеете в виду удаленное /root/.bash_profile правильно? Вы уверены, что удаленная оболочка является ударом? –  terdon♦ 08.05.2013, 14:19
  • 5
    Да, я root:x:0:0:root:/root:/bin/bash. И да - удаленный. –  Patryk 08.05.2013, 14:35

Теги

Похожие вопросы