Есть ли способ обойти или предотвратить выполнение ~/.profile
при вхождении в удаленный сервер Linux с помощью или ssh или шпаклевки?
Если Ваша целевая машина находится в оболочке удара:
user@host:/$ ssh hostname "bash --noprofile"
С другой стороны, если существует другой профиль, Вы хотите использовать
user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"
Если Вы надеетесь отключать все сценарии входа в систему, можно использовать --noprofile
флаг для отключения /etc/profile
, ~/.profile
, и т.д. и --norc
отключить ~/.bashrc
как так:
$ ssh 127.0.0.1 "bash --noprofile --norc"
Следует иметь в виду, что можно также запустить альтернативную оболочку, если Вы доступны. Я должен был использовать это после того, чтобы портить в chsh
:
$ ssh 127.0.0.1 sh
Это, скорее всего, отбросит Вас к пустой оболочке (никакая подсказка), так дайте ее ls
для проверки это работает.
Поскольку другие упомянули, выполнив удар с --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
) был бы все еще обработан, если Вы не изменяете их так же.