Обхід ~ / .profile при віддаленому вході на сервер linux


32

Чи є спосіб обійти або запобігти виконанню під ~/.profileчас входу на віддалений сервер Linux за допомогою ssh або putty?


Чому б ти хотів це зробити? Чому б просто не відредагувати значення у файлі? (Зрештою, це ваш профіль.)
Telemachus

7
Наприклад, це корисно, наприклад, якщо хтось накрутив файл .profile і у вас немає прямого доступу до системи :)
monkey_p

Саме такою ситуацією я опинився в monkey_p
Ендрю Хемптон,

Відповіді:


30

Для баш:

$ ssh hostname "bash --noprofile"

5
Вам також знадобиться -tваріант, я думаю.
grawity

2
ssh -t ім'я хоста "bash --noprofile". Якщо б там не було, я отримував помилку "стандартний повинен бути tty".
нітини

14

Якщо ви хочете , щоб відключити всі сценарії входу в систему , ви можете використовувати --noprofileпрапор , щоб відключити /etc/profile, ~/.profileі т.д. , і --norcвідключити ~/.bashrcв такий спосіб:

$ ssh 127.0.0.1 "bash --noprofile --norc"

Майте на увазі, що ви також можете запустити альтернативну оболонку, якщо така є. Мені довелося використовувати це після псування в chsh:

$ ssh 127.0.0.1 sh

Це, швидше за все, переведе вас у порожню оболонку (без підказки), тому дайте їй lsпереконатися, що вона працює.


4

Якщо ваша цільова машина знаходиться в оболонці:

user@host:/$ ssh hostname "bash --noprofile"

Крім того, якщо є інший профіль, який ви хочете використовувати

user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"

1

Також спробуйте скористатися програмою FTP на зразок WinSCP, щоб видалити помилковий файл входу. Це відкине його, але принаймні ви повинні мати можливість увійти до оболонки за замовчуванням


а може просто перейменувати його.
jezmck

1

Як уже згадували інші, запуск з --noprofileпрапором під час ініціювання з'єднання буде працювати, хоча якщо ви використовуєте іншу оболонку, це може бути, а може і не бути варіантом.

Однією з альтернатив було б те, щоб сценарій профілю сам виявляв SSH-з'єднання і поводився відповідно. Оскільки підключення SSH зазвичай встановлюють ряд змінних середовища, це легко перевірити. Додавання чогось подібного до наступних рядків до початку вашого профілю має бути достатньо:

if [ "$SSH_CONNECTION" != "" ]; then
  echo Logging in with ssh
  return
else
  echo Logging in with something that is not ssh
fi

# rest of your profile goes here

returnПропустить решту сценарію , якщо $SSH_CONNECTIONзмінна середовища, яка зазвичай створюється , коли з'єднання SSH запускається. Інакше профіль буде працювати як звичайний.

Зауважте, що це буде пропускати лише скрипт із зачіпанням профілю. Усі інші сценарії профілю (наприклад /etc/profile:) все ще будуть оброблятися, якщо ви не модифікуєте їх аналогічно.

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