Bir kabuğun uzak bir SSH oturumuna sahip olup olmadığı nasıl algılanır?


9

Sorum benzer bu bir , ama biraz farklı bir şey arıyorum. İki farklı senaryoda ağdaki Linux makinelerine erişmek için kullandığım bir dizüstü bilgisayarım var:

  • Ağa doğrudan, kablolu bir bağlantım var.

  • Ağla dolaylı bir bağlantım var. Ağda, Internet'e açık ağ üzerinde, ağdaki ana bilgisayarlara SSH tünelleri oluşturmak için kullanabileceğim bir ağ geçidi makinesi var. Bu çok daha yavaş, daha yüksek gecikmeli bir bağlantıdır.

Giriş dizinime tüm makinelerden ağdan erişilebildiğinden, bir kopyamı paylaşıyorlar .bashrc. .bashrcİki senaryodan hangisinde olduğumu tespit etmek ve buna göre hareket etmek için işlevsellik eklemek istiyorum (teknik olarak, üç senaryo olurdu, üçüncüsü yerel makineme giriş yaptığım, ancak bu kolayca ele alınmalıdır ). Gibi şeyler yapmak istiyorum:

  • alias ssh ssh -X yerel ağdayken, ancak X yönlendirmesini İnternet üzerinden kullanmak istemiyorum.

  • export EDITOR=gvimyerel ağdayken, ama export EDITOR=vimuzaktayken.

Ve bunun gibi. Önceki cevaba dayanarak, SSH_CLIENT(varsa) içeriğini kontrol edip istemci IP adresinin yerel makinemdeki ağ bağdaştırıcılarından biriyle eşleşip eşleşmediğini görerek böyle bir şey başarabilmem gibi görünüyor . Bunu başarmak için daha ince veya daha sağlam bir yol olup olmadığını görecektim.

Yanıtlar:


10

Bir SSH oturumunu tespit etmek için tuşunu kullanın $SSH_CLIENT.

Yerel ve uzak oturumları birbirinden ayırmak için iki olası yaklaşım vardır: istemci tarafı veya sunucu tarafı. Sunucu tarafında, $SSH_CLIENTyerel IP adresi veya yönlendirme tablosu ile karşılaştırın; bu genellikle bağlantının LAN'dan olup olmadığını gösterir. İstemci tarafında, ForwardX11ayarları şu konumlara koymak isteyebilirsiniz ~/.ssh/config: yesLAN ana bilgisayarları ve noWAN ana bilgisayarları için ayarlayın. Bu ~/.ssh/config, farklı sitelerde farklı olma anlamına gelir ; Ben de öyle yapıyorum ve bir kabuk senaryosu ile benimkini üretiyorum.

LAN bağlantıları için X11 iletme açıksa ve WAN bağlantıları için kapalı ise, favori düzenleyicinizi dikkate alacak $DISPLAYşekilde ayarlayabilirsiniz .

Sunucu tarafı ayarları normalde .profile(veya .bash_profilegiriş kabuğunuz bash ve kullanıyorsanız .bash_profileveya .zprofilegiriş kabuğunuz zsh ise) içine girer .

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 için açık ve LAN için kapalı? İkincisi WAN okumalı - ama bu tek bir karakter düzenlemesi ...
Nils
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.