XForwarding, не загружающий корректный $PATH

Помогло бы, были ли Вы намного более конкретны относительно того, что Вы пытаетесь сделать.

Вот чрезвычайно упрощенный пример:

while true
do
    clear
    date
    sleep 1
done
2
12.11.2010, 22:38
2 ответа

ssh example.com somecommand не читает Ваш ~/.profile; somecommand выполняется непосредственно ssh демоном. Когда Вы не указываете команду, ssh демон вызывает Вашу оболочку входа в систему, которая читает Ваш ~/.profile. (Замена ~/.bash_profile, ~/.zprofile или ~/.login в зависимости от Вашей оболочки входа в систему.)

Существует несколько способов установить переменные среды для неинтерактивной команды, но они все требуют установки в конфигурации сервера, которая обычно является прочь по умолчанию. Принятие достаточно недавнего OpenSSH с обеих сторон:

  • Можно было отправить переменные среды от клиента к серверу с SendEnv директива в ~/.ssh/config. Определенная переменная среды должна быть включена с AcceptEnv директива в конфигурации сервера.

  • Можно установить переменные среды через ~/.ssh/environment на стороне сервера. Это должно быть включено в конфигурации сервера с PermitUserEnvironment директива.

  • Принятие Вас использует основанную на ключе аутентификацию, можно также установить переменные на источник в ~/.ssh/authorized_keys: добавить environment="FOO=bar" в начале соответствующей строки. Снова, Вам нужно PermitUserEnvironment директива в конфигурации сервера.

Если Вы не можете или не хотеть изменять конфигурацию сервера, необходимо будет записать полный путь в удаленную команду или явно получить Ваш .profile в удаленной команде.

ssh user@10.0.0.5 -Y '. ~/.profile; netbeans'
ssh user@10.0.0.5 -Y '/path/to/netbeans'
2
27.01.2020, 22:08

От ssh (1) страница руководства (мой акцент):

Если команда указана, она выполняется на удаленном хосте вместо оболочки входа в систему.

Другими словами, это не делает "вход в систему" в удаленной системе при передаче команды ssh. Это выполняет Вашу оболочку в невходе в систему, неинтерактивном режиме, который заставляет другой набор файлов инициализации работать.

Необходимо проверить, где переменная ПУТИ устанавливается, и переместите это в соответствующий файл. Если Ваша оболочка является ударом, например, необходимо использовать .bashrc, и нет .bash_profile.

1
27.01.2020, 22:08

Теги

Похожие вопросы