Использовать переменные среды пользователя на целевом сервере во время SSH

Я пытаюсь написать сценарий на server1 , который будет выполняться с использованием user1 для выполнения некоторых команд на server2 с user2

Итак, на server1 , если я попытаюсь выполнить приведенную ниже команду с помощью user1 , я не могу видеть переменные среды user2 (который определен в /home/user2/.profile )

user1> ssh user2 @ server2 "env"

Из-за этого я не могу выполнять определенные команды user2 с server1 с помощью ssh.

Примечание: правильный ssh ​​настроен между server1 / user1 и server2 / user2, и я могу просматривать процессы, запущенные на server2 с server1, если я дам

user1> ssh user2 @ server2 "ps -ef | grep user2 "

0
04.10.2016, 17:26
1 ответ

tl;dr

user1> ssh user2@server2 '$env'

Длинный ответ

Вам не хватает $в вашем первом примере запуска команды ssh... если вы действительно вводили ssh user2@server2 "env", тогда "env"останется литеральной строкой и не будет расширяться ни в какие переменные среды.

Если вы хотите, чтобы user2выполнял команду, используя переменные среды user2, вам нужно передать строку, которая при запуске будет расширяться в эти переменные.Например:

user1> ssh user2@server2 'echo $PATH'

Будет эхо user2PATHна терминал.

Однако вам также необходимо знать, что когда вы запускаете команду через ssh, ~/.profileнезапускается заранее (см. обсуждение здесь) . Итак, если вы хотите получить доступ к переменным среды, определенным в ~/.profile, выполните следующее:

user1> ssh user2@server2 'source ~/.profile; $env'

ПРЕДУПРЕЖДЕНИЕ: если вы используете двойные кавычки (") вместо одинарных кавычки ('), то оболочка, запущенная user1, расширит любые переменные среды внутри двойных кавычек до user1переменных среды beforeкоманда когда-либо отправляется через ssh пользователю user2.

1
28.01.2020, 02:47

Теги

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