Plink не использует bashrc или bash_profile для подключения
Я пытаюсь использовать plink как альтернативу ssh для окон, но я нахожу, что когда plink подключается к удаленной машине linux, он не является источником .bash_profile или .bashrc.
Есть ли другой файл точек, который я должен создать? Или есть другой вариант?
Например, мой файл bashrc добавляет каталог на мой путь. Этот каталог содержит дополнительные программы, которые я хочу использовать, один из которых является python.
Это не сработает:
plink host python
Где это будет:
plink host "source .bashrc;python"
Когда я использую plink без параметра команды, он запускает .bash_profile и все работает нормально, но кажется, что просто отправив команду plink не будет источником ни одного файла.
Есть ли способ обхода?
Ответы
Ответ 1
Если вы просто подключаетесь к удаленному хосту через ssh или plink, он запустит оболочку по умолчанию для учетной записи входа. Если эта оболочка bash, bash автоматически будет загружать файл .bash_profile.
Если вы подключаетесь к удаленному хосту через ssh или plink с просьбой выполнить команду, ssh попытается выполнить только эту команду.
То, что вы хотите достичь, может быть сделано с помощью параметра ForcedCommand. См. Также здесь:
Установите принудительную команду как script, которая выполняет 2 вещи:
- введите .bash_profile
- запустить исходную команду (env vars $SSH_ORIGINAL_COMMAND или $SSH2_ORIGINAL_COMMAND)
Ответ 2
Принятый ответ помог мне решить ту же проблему, используя plink.
Вот несколько деталей, которые могут помочь людям в будущем:
Когда ssh-соединение выполняется для запуска одной команды с использованием plink, bash не вызывается как "интерактивная оболочка для входа", поэтому он не запускает /etc/profile, ~/.bash_profile, ~/. bash_login или ~/.profile(см. страницы руководства bash).
В моих целях мне понадобилось ~/.profile для запуска до команды, переданной в командной строке plink.
В файл authorized_keys для этого ключа может быть добавлена принудительная команда (см. страницы руководства sshd). Принудительная команда (например, для запуска ~/.profile) останавливает выполнение команды, заданной plink, поэтому, чтобы заставить ее сделать это, принудительная команда должна выполнить script, который запускает .profile, а затем команду оригинала plink. Последний хранится в переменной среды $SSH_ORIGINAL_COMMAND, поэтому ваш script может выполнять
source .profile
$SSH_ORIGINAL_COMMAND
и вы указываете script в файле ~/.ssh/authorized_keys следующим образом, перед ключом, в той же строке:
command="source forced_command.script" ssh-rsa A3AABzaC1yc...