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

29384
Andrew Hampton

Есть ли способ обойти или предотвратить выполнение ~/.profileпри входе на удаленный сервер Linux с использованием ssh или putty?

30
Зачем тебе это делать? Почему бы просто не отредактировать значения в файле? (Это твой профиль, в конце концов.) Telemachus 14 лет назад 0
Это полезно, например, если кто-то испортил файл .profile и у вас нет прямого доступа к системе :) monkey_p 14 лет назад 7
Именно в такой ситуации я оказался в monkey_p Andrew Hampton 14 лет назад 0

5 ответов на вопрос

28
massysett

Для Баш:

$ ssh hostname "bash --noprofile" 
Вам также понадобится опция `-t`, я думаю. grawity 14 лет назад 4
ssh -t имя хоста "bash --noprofile". Если -t там не было, я получаю сообщение об ошибке "стандартное значение должно быть tty". nitins 10 лет назад 2
14
Jack M.

Если вы хотите отключить все сценарии входа в систему, вы можете использовать --noprofileфлаг, чтобы отключить /etc/profile, ~/.profileи т. Д. И --norcотключить ~/.bashrcследующим образом:

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

Имейте в виду, что вы также можете запустить альтернативную оболочку, если она доступна. Я должен был использовать это после того, как возиться chsh:

$ ssh 127.0.0.1 sh 

Это, скорее всего, приведет вас к пустой оболочке (без подсказки), так что дайте ей lsубедиться, что она работает.

4
Nick Stinemates

Если ваша целевая машина находится в оболочке bash:

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

В качестве альтернативы, если вы хотите использовать другой профиль

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

Как уже упоминали другие, запуск с --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будут по-прежнему обрабатываться, если вы не измените их аналогичным образом.

1
Sphiros O'Kelli

Кроме того, попробуйте использовать программу FTP, такую ​​как WinSCP, чтобы удалить ошибочный файл входа в систему. Это отменит его, но, по крайней мере, вы сможете войти в оболочку по умолчанию

или, возможно, просто переименуйте его. jezmck 10 лет назад 0

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