Ini bisa dilakukan hanya dengan ssh config, tanpa harus menggunakan alias terpisah untuk lan dan wan atau membuat port tambahan apa pun ke depan. (Tapi Anda secara alami membutuhkan beberapa cara untuk mendeteksi apakah Anda berada di dalam Lan Anda atau tidak)
Di ~/.ssh/config
, Anda ingin menambahkan sesuatu seperti ini:
Match host raspi exec "am_i_outside_of_my_lan"
HostName 12.345.67.89
Port 1234
Di tempat am_i_outside_of_my_lan
Anda akan ingin menempatkan perintah yang menentukan apakah Anda berada di dalam jaringan rumah Anda atau tidak, dan kembali dengan 0 kode keluar jika Anda berada di luarnya, dan yang lainnya sebaliknya.
The host
Kondisi ini mungkin cukup jelas, tetapi exec
kondisi waran beberapa penjelasan: Ini cocok hanya ketika perintah diberikan kembali dengan kode keluar 0, yaitu. tidak ada kesalahan.
Jadi dengan kata lain, apa yang dilakukan adalah host raspi
bagian membatasi aturan ini ketika Anda mencoba untuk terhubung ke raspi host, dan exec "am_i_outside_my_lan"
selanjutnya membatasi sehingga hanya berlaku ketika Anda terhubung dari luar jaringan rumah Anda. Jadi di dalam jaringan rumah Anda ssh user@raspi
melakukan persis seperti biasanya, tetapi di luarnya aturannya cocok dan malah setara ssh -p 1234 user@12.345.67.89
.
Adapun apa yang akan digunakan am_i_outside_of_my_lan
, itu tergantung sepenuhnya pada pengaturan Anda. Saya sarankan menempatkan perintah dalam skrip yang terpisah daripada mencoba untuk menulisnya inline, karena kutipannya agak sulit untuk dikerjakan dengan benar.
Secara pribadi, saya menggunakan skrip Python berikut untuk mendeteksi apakah saya berada di dalam jaringan saya sendiri: (Karena nama domain saya diputuskan menjadi ip lokal di dalam jaringan saya sendiri)
#! /usr/bin/env python
import socket, sys
sys.exit(socket.gethostbyname('mydomain.com').startswith('192.168.1.'))
Jika Anda tidak memiliki pengaturan serupa, Anda mungkin harus melakukan sesuatu yang lain. (Misalnya, Anda dapat melihat nama jaringan nirkabel yang terhubung dengan Anda, atau bahkan menanyakan layanan apa-apa-ip-saya untuk mendapatkan ip eksternal dari jaringan yang terhubung dengan Anda)