Вы попытались обеспечить script-security 3
опция позволить openvpn запускать внешние программы?
Хотя лучшее решение для запроса пароля состояло бы в том, чтобы, вероятно, установить OpenVPN для слушания на порте управления, и быть содержат. Можно записать сценарий/интерфейс, который соберет учетные данные от пользователя, и затем можно сделать сокетное соединение и обеспечить учетные данные и выпустить хранение.
Причину проблемы не нашел. Возможно, это специфично для платформы (SLES 10 или вариант, который я использую). Вместо этого я нашел обходной путь:
ssh -t remote1 "/bin/bash --login -c some-script"
Это заставляет оболочку входа в систему, которая запускает сценарии профиля.
Ответы на все вопросы можно найти в разделе «ВЫЗОВ» на странице руководства bash:
Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром --login сначала читает и выполняет команды из файла / etc / profile, если этот файл существует. После чтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login, и ~ / .profile, в этом порядке, а также читает и выполняет команды из первый существующий и читаемый. Параметр --noprofile может быть используется при запуске оболочки для предотвращения этого поведения.
Когда оболочка входа в систему завершается, bash считывает и выполняет команды из файла ~ / .bash_logout, если он существует.
При запуске интерактивной оболочки, которая не является оболочкой входа в систему, bash читает и выполняет команды из ~ / .bashrc, если этот файл существует. Эта можно запретить с помощью параметра --norc. Параметр файла --rcfile заставит bash читать и выполнять команды из файла вместо ~ / .bashrc.
Как видите, интерактивные оболочки исходят только из .bashrc
, и часто .bash_profile
будет получен оттуда, что объясняет порядок, который вы видите .
Очень часто в этих файлах также есть условие, чтобы анализировать определенные разделы только для интерактивных оболочек ( [[$ - == * i *]]
), что объясняет, почему некоторые части могут появляться отсутствует для неинтерактивных оболочек.
Разница между
ssh remote1 echo '$PATH'
и
ssh -t remote1 echo '$PATH'
также объясняется на странице руководства bash:
Bash пытается определить, когда он выполняется со стандартным вводом, подключенным к сетевое соединение, как при выполнении удаленным демоном оболочки, обычно
rshd
, или демоном безопасной оболочкиsshd
. Если bash определяет, что он запускается таким образом, он читает и выполняет команды из~ / .bashrc
[я предполагаю, что следует прочитать/etc/bash.bashrc
] и~ / .bashrc
, если эти файлы существуют и доступны для чтения.
В первом примере стандартный ввод bash
подключен к сетевому соединению, поэтому он запускает ~ /. bashrc
. Во втором случае его stdin поступает от псевдотерминала, поэтому это не так.