Plink не использует bashrc или bash_profile при подключении - PullRequest
11 голосов
/ 04 августа 2010

Я пытаюсь использовать plink в качестве альтернативы ssh в Windows, но обнаруживаю, что когда plink подключается к удаленной машине с Linux, он не получает исходные файлы .bash_profile или .bashrc. Нужно ли создавать другой файл точек? Или есть другой вариант?

Например, мой файл bashrc добавляет каталог к ​​моему пути. Этот каталог содержит дополнительные программы, которые я хочу использовать, одна из которых - python.

Это не будет работать:

plink host python

Где как это будет:

plink host "source .bashrc;python"

Когда я использую plink без параметра команды, он получает исходный файл .bash_profile, и все работает нормально, но, похоже, что простая отправка команды plink не приведет ни к какому из файлов.

Есть ли обходной путь?

Ответы [ 2 ]

9 голосов
/ 02 июля 2013

Принятый ответ помог мне решить ту же проблему, используя plink.Вот еще немного подробностей, которые могут помочь людям в будущем:

Когда для запуска одной команды с использованием plink установлено соединение ssh, bash не вызывается как «интерактивная оболочка входа в систему», поэтомузапустите / etc / profile, ~ / .bash_profile, ~ / .bash_login или ~ / .profile (см. страницы руководства по bash).

Для моих целей мне понадобилось ~ / .profile для запуска докоманда передана в командной строке plink.

В этот файл можно добавить принудительную команду для файла ключа_документа (см. страницы справочника sshd).Принудительная команда (например, для запуска ~ / .profile) останавливает выполнение команды, указанной в plink, поэтому, чтобы заставить ее выполнять оба действия, принудительной командой должно быть выполнение сценария, который запускает .profile, а не исходную команду plink.Последний хранится в переменной среды $ SSH_ORIGINAL_COMMAND, поэтому ваш сценарий может выполнить

source .profile
$SSH_ORIGINAL_COMMAND

, и вы задаете сценарий в файле ~ / .ssh / authorized_keys следующим образом, перед ключом, в той же строке:

command="source forced_command.script" ssh-rsa A3AABzaC1yc...
7 голосов
/ 05 августа 2010

Если вы просто подключитесь к удаленному хосту через ssh или plink, он запустит оболочку учетной записи по умолчанию.Если это оболочка bash, bash автоматически получит исходный файл .bash_profile.

Если вы подключаетесь к удаленному хосту через ssh или plink, запрашивая выполнение команды, ssh попытается выполнить только эту команду.

То, чего вы хотите достичь, можно сделать с помощью ForcedCommand .См. Также здесь:

Установить принудительную команду как скрипт, выполняющий 2 действия:

  1. источник .bash_profile
  2. выполнить оригинальную команду (env vars $ SSH_ORIGINAL_COMMAND или $ SSH2_ORIGINAL_COMMAND)
...