Можно ли проверить, является ли соединение локальным или через ssh * после * повышения до учетной записи root с помощью `sudo`?

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

5
задан 16 September 2020 в 11:21

2 ответа

Если вы используете оболочку bash, вы можно выполнить pstree -s $$ ($$ - PID текущей оболочки) и найти в выходных данных «sshd».

4
ответ дан 4 January 2021 в 08:24

Вы также можете использовать:

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 я использую в настоящее время? .

2
ответ дан 4 January 2021 в 08:24

Другие вопросы по тегам:

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