файл точки не получен при запуске команды через ssh

11

Когда я запускаю свою программу в интерактивном режиме, она работает нормально:

ssh somehost
$ ~/some/path/somescript.py

Когда я запускаю свою программу через ssh напрямую, она не работает. Переменная PYTHONPATHне установлена, потому что .bashrcне является источником.

ssh somehost ~/some/path/somescript.py

Если я бегу ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py', все работает нормально.

Но последний не будет работать для некоторых других людей, например, используя tcsh и вообще не имея ~/.bashrc).

Что команда для запуска вещей через SSH на другой хост , который работает для всех оболочек?

bzdjamboo
источник
1
Ответ здесь: stackoverflow.com/questions/820517/bashrc-at-ssh-login , в основном, ssh не использует исходный код .bashrc, вам необходимо получить исходный код .bashrc через .bash_profile или другие параметры.
EightBitTony
1
@EightBitTony: Нет, это другая проблема. Вопрос bzdjamboo о неинтерактивной сессии.
Жиль "ТАК - перестань быть злым"
На самом деле последний ответ в ссылке, которую я разместил, кажется ценным, ssh создает исходный код .bashrc, но он не выполняется из-за проверки на интерактивность. Я ценю, однако, что ваш ответ охватывает все основы.
EightBitTony
3
@EightBitTony: На этот вопрос принятый ответ является хорошим решением для спрашивающего, но ответы не дают полной информации. Сам SSH ничего не дает. Если ваш Логин оболочки Bash вызывается как bash, тогда него источников .bash_profileили .profileдля интерактивного входа в систему , а также .bashrcдля неинтерактивного входа в систему . Если ваша оболочка входа в систему bash вызывается как shили ash или ksh, то она используется .profileдля интерактивного входа и ничего для неинтерактивного входа.
Жиль "ТАК - перестать быть злым"

Ответы:

12

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

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

Вы не должны устанавливать переменные окружения в .bashrc: этот файл предназначен для интерактивных оболочек и читается в каждом экземпляре bash. Должны быть установлены переменные среды .profile, которые читаются при входе в систему. Помимо очень небольшого числа людей, которые не используют оболочку в стиле Борна в качестве оболочки входа в систему, .profileона работает для всех, независимо от того, используют ли они bash или zsh или Csh или рыба в интерактивном режиме. Смотрите также разницу между .bashrc и .bash_profile , какие файлы настройки должны быть использованы для настройки переменных окружения с баш? ,

Тем не менее, существует способ создания сценария каждый раз, когда вы входите через ssh с определенным ключом. См. Есть ли способ передать информацию конфигурации оболочки при SSHing на хост? , Запуск ш файлов через SSH .

Жиль "ТАК - перестань быть злым"
источник
Теперь, как я могу пометить это как «ответ»? :-)
bzdjamboo
В левой части этой секции ответов должны быть стрелки вверх и вниз и счетчик голосов. Чуть ниже должен быть контур флажка. Вы можете нажать эту кнопку, чтобы активировать функцию принятия ответа.
Калеб
Спасибо вам всем еще раз, но, очевидно, ваши ответы не решили мою проблему.
bzdjamboo
Вот немного более новая формулировка проблемы и мое текущее понимание ее корня.
bzdjamboo
Кажется, я не могу добавить более 60 или около того символов здесь, поэтому я должен снова задать свой вопрос отдельно. Извините, аб. тот. Опять же, этот не решен, и копание намного больше в течение нескольких дней не помогло.
bzdjamboo
0

У меня была такая же проблема, но для меня решение было другим. Мой пользователь не был настроен на использование bash в качестве оболочки, вместо этого он использовал zsh в качестве оболочки, поэтому файлы bash dot не запускались при входе в систему. Откройте / etc / passwd в текстовом редакторе и найдите свое имя пользователя и используемую оболочку:

root:x:0:0:root:/root:/bin/zsh

Вот так выглядит моя запись пользователя. Обратите внимание, что он говорит / bin / zsh вместо / bin / bash. Для zsh правильным точечным файлом является ~ / .zprofile. Его содержимое будет запускаться при каждом входе в систему с использованием ssh.

Мартин Хансен
источник