Как определить текущий тип удаленного соединения? (rsh или ssh)
Я хочу знать, есть ли какие-то методы, чтобы узнать текущий тип соединения с удаленным сервером (rsh или ssh?). Средой является Solaris 9, SuSE linux, csh.
2 ответа
Решение
Ты можешь использовать echo $SSH_CONNECTION;
, SSH установит эту переменную среды на удаленном сервере. Он содержит IP-адрес клиента, порт клиента, IP-адрес сервера и порт сервера. Он должен быть установлен только для соединений SSH.
Краткий ответ: тест "$SSH_CLIENT$SSH2_CLIENT$SSH_TTY"
И кто связан И кто ваш родитель.
Для этого у проекта liquidprompt есть функция (bash/zsh), которая выглядит следующим образом:
# If this is an SSH connection.
if [[ -n "$SSH_CLIENT$SSH2_CLIENT$SSH_TTY" ]] ; then
# This is SSH.
else
# Get the host part of the who am i command.
local sess_src="$(who am i | sed -n 's/.*(\(.*\))/\1/p')"
# Get the name of the parent process.
local sess_parent="$(ps -o comm= -p $PPID 2> /dev/null)"
if [[ -z "$sess_src" && "$sess_src" = *"shepherd" ]] ; then
# This is a qrsh connection (cf. Grid Engine).
elif [[ -z "$sess_src" || "$sess_src" = ":"* ]] ; then
# This is a local connection.
elif [[ "$sess_parent" = "su" || "$sess_parent" = "sudo" ]] ; then
# This is a su/sudo
else
# This (may be) telnet.
fi
fi