Як визначити, коли оболонці належить віддалений сеанс 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для хостів локальної мережі та noдля хостів WAN. Це передбачає наявність різних ~/.ssh/configна різних сайтах; це те, що я роблю, і я генерую шахту за допомогою сценарію оболонки.

Якщо переадресація X11 увімкнена для підключення до локальної мережі та вимкнено для WAN-з'єднань, тоді ви можете встановити улюблений редактор для $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"

увімкнено для LAN та вимкнено для LAN? Другий повинен прочитати WAN - але це одна редакція символу ...
Нілс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.