Я пытаюсь написать сценарий на 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 "
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.