Я хочу посмотреть, подключен ли я через ssh или запущен локальный терминал.
Если я просто подключусь к серверу по ssh, не переходя на root через sudo
, это просто. Любая из переменных $ SSH_CLIENT
, $ SSH_CONNECTION
или $ SSH_TTY
может использоваться для проверки того, подключена ли она через SSH или локально.
Проблема: Когда Я повышаю уровень до учетной записи root с помощью sudo -i
для выполнения административных действий, ни одна из этих переменных не помогает - все они пусты.
Как лучше всего узнать, является ли соединение локальным или через SSH?
РЕДАКТИРОВАТЬ: С принятым ответом легко получить ненавязчивую подсказку bash, которая отражает статус и привилегии ssh:
if [ "$color_prompt" = yes ]; then
# when system is accessed via SSH, hostname with light grey background
if [[ $(pstree -s $$) = *sshd* ]]; then sshbg="\[\033[48;5;7m\]"; fi
# when used as root, change username to orange and '#' to red for prompt
if [ $(id -u) -eq 0 ]; then usercol="\[\033[38;5;3m\]"; hashcol="\[\033[38;5;1m\]"; else usercol="\[\033[38;5;2m\]"; fi
# bash PS1 prompt
PS1="${usercol}\u\[$(tput sgr0)\]@\[$(tput sgr0)\]\[\033[38;5;4m\]${sshbg}\h\[$(tput sgr0)\]:\[$(tput sgr0)\]\[\033[38;5;6m\]\w\[$(tput sgr0)\]${hashcol}\\$ \[$(tput sgr0)\]"
unset sshbg rootcol hashcol
fi
Временная версия части pstree
выполняется менее чем за 20 мс, поэтому его можно использовать без заметных задержек.
Если вы используете оболочку bash, вы можно выполнить pstree -s $$
($$ - PID текущей оболочки) и найти в выходных данных «sshd».
Вы также можете использовать:
who am i | awk -F' ' '{print $2}'
Если указано pts / 0, pts / 1 и т. Д., Вы используете SSH, если указано tty1, tty2 и т. Д.вы используете локальное соединение.
Когда я подключаюсь с помощью SSH, я получаю следующее от , кто я
:
am pts/0 2020-08-28 12:33 (172.17.0.5)
Возможно, IP-адрес также можно использовать в качестве индикатора для различения SSH-подключения через локальное соединение на рабочем столе.
Также объясняется здесь: Как проверить, какой tty я использую в настоящее время? .