Cara menentukan beberapa kombinasi HostName / Port di .ssh / config

10

Saya memiliki beberapa notebook dan workstation yang menarik dan mendorong dari beberapa repositori Mercurial di server pusat. Saya biasanya menggunakan .ssh/configuntuk mengatur alias:

Host repo-server
HostName server.somedomain
User user143
IdentityOnly yes
IdentityFile ~/hgkey
Port 156

... dan beberapa opsi lagi, Anda mendapatkan idenya. Saya kemudian dapat dengan mudah melakukan hg push ssh://repo-server//hgroot/someprojectpada setiap repositori lokal, dan saya dapat mengubah alamat server dan porta di satu tempat.

Untuk workstation, ini berfungsi dengan baik, tetapi notebook dapat mengakses server baik dari dalam jaringan atau dari luar, menggunakan alamat yang berbeda dan port yang berbeda. Apakah ada cara saya dapat menentukan beberapa kombinasi HostName / Port sehingga SSH secara otomatis mencobanya secara berurutan? Dengan cara ini, pengguna dapat mendorong dan menarik tanpa harus peduli dengan alamat yang benar.

(tentu saja, menggunakan VPN akan menjadi solusi yang paling benar)

leoluk
sumber

Jawaban:

5

Saya khawatir itu tidak mungkin dengan SSH.

Anda mungkin dapat mengatasinya menggunakan ProxyCommandopsi ssh, bersama dengan skrip khusus yang membuat koneksi TCP ke server (menggunakan netcat), tergantung pada bagaimana / di mana notebook Anda terhubung. Sesuatu di sepanjang garis:

#!/bin/bash
SSID=$(/sbin/iwgetid wlan0 -r)

case "$SSID" in
net1)
  nc <host1> <port1>
  ;;
net2)
  nc <host2> <port2>
  ;;
*)
  nc <host3> <port3>
  ;;
esac

Kemudian, di Anda .ssh/config, Anda membutuhkan yang berikut:

Host repo-server
  User user143
  IdentityOnly yes
  IdentityFile ~/hgkey
  ProxyCommand path-to-script
Oliver
sumber
Kira saya akan menulis skrip yang memodifikasi HostNameentri kemudian. Terima kasih.
leoluk
Ini terlihat spesifik Linux .. misalnya, / sbin / iwgetid tampaknya tidak ada di bawah WSL ...
Michael
-1

Alternatif lain bisa dengan membuat skrip untuk meneruskan ssh port 22 dari "kanan" ip ke beberapa port lokal yang tidak digunakan pada laptop Anda dan kemudian ssh di sana. Saya menggunakannya dalam beberapa situasi.

jacopod
sumber
1
Ini sama sekali tidak jelas tanpa contoh.
Andrew Schulman