Bu, lan ve wan için ayrı takma adlar kullanmadan veya ileriye yönelik herhangi bir bağlantı noktası oluşturmadan, sadece ssh config ile mükemmel bir şekilde yapılabilir. (Ama doğal olarak lan'in içinde olup olmadığını tespit etmek için bir yol bulmalısın)
İçinde ~/.ssh/config
, böyle bir şey eklemek isteyeceksiniz:
Match host raspi exec "am_i_outside_of_my_lan"
HostName 12.345.67.89
Port 1234
Bunun yerine, am_i_outside_of_my_lan
ev ağınızın içinde olup olmadığınızı belirleyen bir komut yerleştirmek isteyeceksiniz ve bunun dışındaysanız 0 çıkış kodu ve başka bir şey ile geri döneceksiniz.
host
Durum muhtemelen kendi kendini açıklayıcı olmakla birlikte, exec
durum garanti bir açıklaması: Bu eşleştiğinde çıkış kodu 0, yani verilen komut döner. hata yok.
Başka bir deyişle, bunun yaptığı şey, host raspi
ana bilgisayar raspi'ye bağlanmaya çalıştığınızda bu kuralı kısıtlar ve exec "am_i_outside_my_lan"
daha da kısıtlar, böylece yalnızca ev ağınızın dışından bağlandığınızda geçerli olur. Ev ağınızın içinde ssh user@raspi
normalde tam olarak ne yaparsa yapın, ancak bunun dışında kural eşleşir ve bunun yerine eşdeğerdir ssh -p 1234 user@12.345.67.89
.
Ne kullanacağınıza gelince am_i_outside_of_my_lan
, bu tamamen kurulumunuza bağlıdır. Komutları satır içi yazmaya çalışmak yerine ayrı bir komut dosyasına yerleştirmeyi öneririm, çünkü alıntı yapmak biraz zor olabilir.
Şahsen, kendi ağımın içinde olup olmadığımı tespit etmek için aşağıdaki Python komut dosyasını kullandım: (Etki alanı adım kendi ağımdaki yerel bir IP'ye çözümlendiğinden)
#! /usr/bin/env python
import socket, sys
sys.exit(socket.gethostbyname('mydomain.com').startswith('192.168.1.'))
Benzer bir kurulumunuz yoksa, başka bir şey yapmanız gerekebilir. (Örneğin, bağlandığınız kablosuz ağın adına bakabilir, hatta bağlandığınız ağın harici ip'ini almak için my-ip-servisini sorgulayabilirsiniz)