точковий файл не отримується під час виконання команди через 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 на інший хост , який працює для всіх оболонок?


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 викликана як shash або ksh, вона джерела .profileдля інтерактивного входу і нічого для неінтерактивного входу.
Жил "ТАК - перестань бути злим"

Відповіді:


12

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

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

Ви не повинні встановлювати змінні середовища у .bashrc: цей файл призначений для інтерактивних оболонок і читається в кожному екземплярі bash. Потрібно встановити змінні середовища .profile, що читається під час входу. Окрім дуже малої кількості людей, які не використовують оболонку в стилі Борна як оболонку для входу, .profileвона працює для всіх, будь вони bash чи zsh чи csh або риба інтерактивно. Див. Також Різниця між .bashrc та .bash_profile , які файли налаштування слід використовувати для налаштування змінних середовища з bash? .

При цьому, існує спосіб джерела скрипту щоразу, коли ви входите через ssh за допомогою певного ключа. Див. Чи є спосіб переслати інформацію про конфігурацію оболонки під час SSHing на хост? , sh файли запуску через 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.