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

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

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

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

 ssh somehost ~/some/path/somescript.py 

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

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

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

2 Solutions collect form web for “dot файл не получен при запуске команды через ssh”

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

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

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

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

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

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

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

  • команда ssh и неинтерактивная оболочка без входа
  • Не может SSH в WD моя книга
  • Shell Script - как scp на удаленный сервер и загружать файлы и защищать пароль
  • Сценарий, позволяющий пользователю отменить выход из оболочки
  • ssh-copy-id другой порт
  • SSH с ключами RSA под Raspbian продолжает запрашивать парольную фразу
  • Предоставление доступа к ограниченной оболочке git
  • какие порты необходимо открыть на брандмауэре?
  • Обработка Ctrl-C в сеансе SSH
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • scp и сжимать одновременно, без промежуточного сохранения
  • Войдите в систему через ssh-key, могу ли я сбросить пароль учетной записи?
  • Linux и Unix - лучшая ОС в мире.