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...