Как определить, когда оболочка принадлежит удаленному сеансу SSH?

9

Мой вопрос похож на этот , но я ищу что-то немного другое. У меня есть ноутбук, который я использую для доступа к машинам Linux в сети в двух разных сценариях:

  • У меня есть прямое проводное подключение к сети.

  • У меня есть косвенное подключение к сети. В сети есть шлюз, доступный через Интернет, который я могу использовать для установки SSH-туннелей к хостам в сети. Это, очевидно, намного более медленное соединение с более высокой задержкой.

Мой домашний каталог доступен по сети со всех машин, поэтому они разделяют мою копию .bashrc. Я хотел бы добавить функциональность, чтобы .bashrcопределить, в каком из двух сценариев я нахожусь, и действовать соответствующим образом (технически, было бы три сценария, где третий - то, что я вхожу в свою локальную машину, но это должно быть легко обработано ). Я хотел бы сделать такие вещи, как:

  • alias ssh ssh -X когда я в локальной сети, но я не хочу использовать переадресацию X через Интернет.

  • export EDITOR=gvimкогда я в локальной сети, но export EDITOR=vimкогда я удаленный.

И так далее. Исходя из предыдущего ответа, похоже, что я смогу выполнить нечто подобное, проверив содержимое SSH_CLIENT(если оно существует) и проверив, соответствует ли IP-адрес клиента одному из сетевых адаптеров на моей локальной машине. Я думал, что увижу, есть ли более приятный или более надежный способ сделать это.

Джейсон Р
источник

Ответы:

10

Чтобы обнаружить сеанс SSH, используйте $SSH_CLIENT.

Чтобы различать локальные и удаленные сеансы, существует два возможных подхода: на стороне клиента или на стороне сервера. На стороне сервера сравните $SSH_CLIENTс локальным IP-адресом или таблицей маршрутизации; это обычно говорит вам, является ли соединение из локальной сети. На стороне клиента вы можете захотеть поместить ForwardX11настройки в свой ~/.ssh/config: установите его yesдля хостов LAN и на noхосты WAN. Это подразумевает наличие разных ~/.ssh/configна разных сайтах; это то, что я делаю, и я генерирую свой с помощью сценария оболочки.

Если переадресация X11 включена для подключений по локальной сети и отключена для подключений по глобальной сети, вы можете настроить свой любимый редактор $DISPLAYна учет.

Настройки на стороне сервера обычно входят в ваш .profile(или .bash_profileесли ваша оболочка входа в систему bash и вы используете .bash_profile, или .zprofileесли ваша оболочка входа в систему zsh).

case ${SSH_CLIENT%% *}//$(/sbin/ifconfig |
                          sed -n 's/^.* addr:\([0-9][0-9.]*\) .*/\1/p' |
                          tr '\n' /)/ in
  "") :;;# local session
  10.42.*/10.42.*) :;; # LAN session
  1.2.3.*/1.2.3.*) :;; # LAN session
  *) unset DISPLAY;; # WAN session
esac
export EDITOR=vim
if [ -n "$DISPLAY" ] && type gvim >/dev/null 2>/dev/null; then
  EDITOR=gvim
fi
export VISUAL="$EDITOR"
Жиль "ТАК - перестань быть злым"
источник
включен для локальной сети и выключен для локальной сети? Второй должен читать WAN - но это редактирование одного символа ...
Nils