Bagaimana cara mengatur ssh agar mencoba tidak hanya port 22 tetapi juga port sekunder setiap kali?

9

Sebagai bagian dari upaya saya untuk mengurangi kebisingan dalam log dan sedikit mengurangi kemampuan menemukan (dan di atas fail2ban, hanya mengizinkan otentikasi kunci publik, dll.) Saya secara rutin mengubah sshd-port pada server yang saya atur ke port yang berbeda, misalkan 5492. Saat ini Saya menambahkan -p 5492 ke perintah ssh saya, atau menambahkan port untuk setiap server tertentu ke server saya ssh_config.

Apakah ada cara untuk mengkonfigurasi ssh untuk mencoba menghubungkan ke port 22 dan port 5492 jika port 22 tidak berfungsi?

Riley
sumber
1
Saya lebih suka daripada memiliki keamanan melalui ketidakjelasan, mengatur VPN dan tidak memiliki port ssh terbuka ke Internet pada umumnya.
Rui F Ribeiro
2
@RuiFRibeiro Saya setuju, itu tidak lebih aman. Namun demikian, menjaga kebisingan dalam file log. Seseorang juga dapat menggunakan port knocking untuk mengurangi upaya login yang memang meningkatkan keamanan.
Ned64
2
@RuiFRibeiro Apakah server VPN lebih aman daripada server SSH?
Riley
Itu semua tergantung pada implementasinya. Dalam pekerjaan saya sebelumnya, saya mendefinisikan 2 entri VPN untuk redundansi, dan tidak ada sshkehadiran apa pun untuk luar.
Rui F Ribeiro
2
Keamanan oleh ketidakjelasan adalah lapisan TAMBAHAN yang baik di atas pengaturan yang baik, terutama ketika itu tentang penyerang oportunistik.
rackandboneman

Jawaban:

11

Anda bisa membungkus skrip shell sshtetapi sshitu sendiri tidak akan melakukannya.

Salah satu cara menggunakan fungsi bash adalah ini (dimasukkan ke dalam ~/.bashrc):

function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }

Ngomong-ngomong, disarankan untuk menggunakan rootport -erverved untuk layanan sistem seperti sshuntuk menghindari pengguna dari memiliki proses yang mendengarkan, katakanlah, port 5492. Mereka mungkin bermain manusia di tengah dan mungkin menangkap data login. Jadi, gunakan porta <1024.

Ned64
sumber
1
Itu solusi yang bagus. Juga catatan bagus di port!
Riley
5
Perhatikan bahwa koneksi kedua akan dibuat bahkan jika yang pertama berhasil jika perintah dijalankan dengan sshmengembalikan bukan nol. Contoh sepele akan menjadi ssh user@server false.
Kusalananda
1
@ Kusalananda Terima kasih, saya telah menulis commandsekarang. Hanya ingin menghindari rekursi, seperti yang sudah Anda duga.
Ned64
Masalah @ Kusalananda menyebutkan dapat (sebagian besar) dihindari dengan menguji status keluar spesifik ssh- jika ada kesalahan ssh (sebagai lawan dari perintah remote gagal), itu akan keluar dengan status 255. Dengan demikian, command ssh -p 22 "$@"; if [ "$?" -eq 255 ]; then command ssh -p 5492 "$@"; fiharus bekerja.
Gordon Davisson
10

sshitu sendiri dapat melakukan ini melalui Matchdidokumentasikan ssh_config(5)meskipun dokumentasi agak jarang pada contoh. Bentuk ini mungkin cocok jika seseorang ingin mendorong kompleksitas ke dalam konfigurasi SSH meskipun dibatasi oleh batasan ssh_config(5)sintaks dan mungkin memerlukan beberapa mengutak-atik untuk hasil yang diinginkan. Khususnya port khusus tidak dapat diatur atau dapat diatur salah dari Matchupaya sebelumnya . Inilah sebabnya, di bawah ini, ditetapkan dua kali saat diuji untuk, atau sekali untuk default, dan tidak diatur ketika menetapkan default kanonik.

# here we set the defaults for the host (no port!)
Match !canonical host testhost
  CanonicalizeHostname yes
  Hostname 192.0.2.42
  IdentityFile ~/.ssh/id_blahblah
  ...
# port available?
Match canonical host 192.0.2.42 exec "is-ssh-up %h 2222"
  Port 2222
# or the default port
Match canonical host 192.0.2.42
  Port 22

is-ssh-up hanya memeriksa apakah sesuatu merespons pada port yang diberikan dan mungkin terlihat seperti

#!/usr/bin/env expect
package require Tcl 8.5
if {[llength $argv] < 2} {
   puts stderr "Usage: is-ssh-up host port"
   exit 1
}
puts stderr "is-ssh-up: DEBUG trying $argv"
set socket [socket -async [lindex $argv 0] [lindex $argv 1]]
chan event $socket readable [list exit 0]
after 3000 [list exit 1]
vwait godot
thrig
sumber
1
jika-maka-lain di .ssh / config? Saya tidak akan percaya itu !!
Archemar
1

Anda dapat menggunakan fungsi wildcard dari ~.ssh/config, menempatkan entri ini di daftar Anda:

Host *
Port 5492

Tapi ini tidak akan kembali ke 22 dengan sendirinya.

Jika Anda meletakkannya di akhir, Anda masih bisa menimpanya untuk host yang Anda butuhkan 22 dengan meletakkan nilai yang berbeda di atasnya. (Dan Anda selalu dapat menimpanya di baris perintah.)

Paŭlo Ebermann
sumber