Saya telah mengatur ssh dan penerusan port router sehingga saya dapat ssh ke komputer di jaringan rumah saya ketika saya tidak di rumah. Saat ini saya memiliki dua entri di .ssh/config
file saya satu untuk ketika saya berada di jaringan rumah saya dan satu untuk ketika saya tidak:
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
Ini bekerja tetapi saya bertanya-tanya apakah saya dapat membuat segalanya lebih mudah pada diri saya sendiri. Saya berharap ada cara untuk daftar beberapa entri HostName sehingga jika yang pertama gagal itu kembali ke yang kedua:
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
Jadi itu pertama-tama akan mencoba untuk terhubung ke host di jaringan lokal saya dan jika itu tidak ada, itu akan mencoba untuk terhubung menggunakan nama host dinamis no-ip saya. Saya telah mencoba memasukkan dua Nama Host tetapi menjalankan ssh mycomputer
hanya blok tanpa melakukan apa pun.
Saya telah mematikan otentikasi kata sandi demi kunci sehingga secara tidak sengaja menghubungkan ke komputer di jaringan lokal ketika saya tidak berada di jaringan rumah saya tidak akan mengambil risiko kata sandi saya pergi ke mana pun seharusnya tidak.
Apakah mungkin untuk menentukan HostNames cadangan untuk mencoba jika yang pertama tidak berhasil?
.ssh/config
dapat menjalankan skrip untuk properti tertentu. Saya tahu Anda bisa dengan ProxyCommand. Anda dapat melakukan sesuatu seperti yang ditunjukkan dalam Tanya Jawab ini dari SF - serverfault.com/questions/401233/… .Jawaban:
Ini jelek, tapi saya pikir Anda bisa melakukannya menggunakan
exec
kriteria untukMatch
pada status keluar dari ketukan port misalnyaPerhatikan bahwa ini tidak dapat memastikan apakah Anda berada di jaringan rumah "Anda" - hanya saja Anda berada di segmen LAN pribadi dengan rentang alamat yang sama yang kebetulan memiliki layanan yang mendengarkan pada alamat / port yang sama.
sumber
-w 1
ataunc
sepertinya menunggu selamanya. Apa yang bisa lebih sederhana adalah Pertandingan keduaMatch exec "true"
karena jika pertandingan pertama gagal, coba saja pilihan kedua secara membabi buta.Match
tidak adaElse
)ssh xyz.com
sayaMatch exec "true"
tertangkap itu dan diarahkan saya ke server rumah saya menggunakan Hostname jauh saya. Saya akan mencoba dengan eksekutif Anda tetapi saya pikir hal yang sama akan terjadi.Match exec... Match !exec
menyebabkan ssh'ing ke domain lain untuk memicuMatch !exec
dan menulis ulang HostName.~/.ssh/config
tidak peduli tentang lekukan. Perintah tertentu mengatur ulang ruang lingkup, yaitu setiap baris Host baru mengatakan "baris sebelumnya adalah untuk Host sebelumnya, baris berikut adalah untuk Host baru ini." TernyataMatch
memiliki kekuatan "pengaturan ulang" yang sama dengan Host. Untuk menjelaskan hal ini, saya mengganti baris Host saya denganMatch Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"
dan mendefinisikan semua nilai khusus untuk jaringan lokal saya. Saya kemudian menambahkan baris yang cocok kecuali!exec
dan menambahkan semua nilai ketika saya keluar dari jaringan. Sekarang berfungsi dengan baik untuk semua host.Saya menggunakan seperti ini.
ssh_config tidak memiliki sesuatu seperti blok indentasi. Jika Anda ingin membatasi kalimat yang cocok dengan host tertentu, maka Anda harus menjelaskan kondisi lengkapnya.
Anda dapat menghindari menunggu lama
nc
dengan memberikannya-G 1
(batas waktu koneksi 1s), dan Anda dapat menggunakan perilaku berikut untuk menghindari beberapa permintaan darinc
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
sumber
Tidak; jika Anda menentukan beberapa
HostName
s untuk satuHost
entri, hanya entri pertama yang akan diakui:sumber
ssh mycomputer
dalamnya harus cukup jelas komputer mana yang saya hubungkan.