Come impostare ssh per provare non solo la porta 22 ma la porta secondaria ogni volta?


9

Come parte del mio sforzo per ridurre il rumore nei log e ridurre leggermente la rilevabilità (e in aggiunta a fail2ban, consentendo solo l'autenticazione con chiave pubblica ecc.), Cambio abitualmente porte sshd su server che ho impostato su una porta diversa, diciamo 5492. Attualmente Aggiungo -p 5492 al mio comando ssh, oppure aggiungo la porta per ogni server specifico nel mio ssh_config.

C'è un modo per configurare ssh per provare a connettersi sia alla porta 22 che alla porta 5492 se la porta 22 non funziona?


1
Preferisco invece avere sicurezza attraverso l'oscurità, impostare una VPN e non avere affatto porte ssh aperte su Internet.
Rui F Ribeiro,

2
@RuiFRibeiro Sono d'accordo, non è più sicuro. Tuttavia, mantiene basso il rumore nei file di registro. Si potrebbe anche usare il port knocking per ridurre i tentativi di accesso che aumentano la sicurezza.
Ned64,

2
@RuiFRibeiro Ma un server VPN è più sicuro di un server SSH?
Riley,

Tutto dipende dall'implementazione. Nel mio precedente lavoro, ho definito 2 voci VPN per ridondanza e nessuna sshpresenza all'esterno.
Rui F Ribeiro,

2
La sicurezza per oscurità è un buon livello AGGIUNTIVO in aggiunta a una buona configurazione, specialmente quando si tratta di attaccanti opportunisti.
Rackandboneman,

Risposte:


11

Potresti avvolgere uno script di shell sshma di per sshsé non lo farà.

Un modo per usare una funzione bash è questo (messo in ~/.bashrc):

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

A proposito, si consiglia di utilizzare rootporte riservate per i servizi di sistema, al sshfine di evitare che gli utenti abbiano un processo in ascolto, diciamo, sulla porta 5492. In caso contrario, potrebbero giocare a man nel mezzo e possibilmente acquisire dati di accesso. Quindi, utilizzare una porta <1024.


1
Questa è un'ottima soluzione. Ottima anche la nota sui porti!
Riley,

5
Si noti che la seconda connessione verrà stabilita anche se la prima avrà esito positivo se il comando eseguito da sshrestituisce un valore diverso da zero. Un esempio banale sarebbe ssh user@server false.
Kusalananda

1
@Kusalananda Grazie, ho scritto commandora. Volevo solo evitare la ricorsione, come hai indovinato.
Ned64,

Il problema menzionato da @Kusalananda può essere (principalmente) evitato testando lo stato di uscita specifico di ssh- se c'è un errore ssh (al contrario del fallimento del comando remoto), uscirà con uno stato di 255. Pertanto, command ssh -p 22 "$@"; if [ "$?" -eq 255 ]; then command ssh -p 5492 "$@"; fidovrebbe funzionare.
Gordon Davisson,

10

sshstesso può farlo tramite Matchdocumentato ssh_config(5)sebbene la documentazione sia in qualche modo scarsa sugli esempi. Questo modulo può essere adatto se si vuole spingere la complessità nella configurazione SSH anche se è limitato dai limiti della ssh_config(5)sintassi e può richiedere un po 'di confusione per il risultato desiderato. In particolare, la porta personalizzata non può essere impostata o può essere impostata in modo errato dal Matchtentativo precedente . Questo è il motivo per cui, di seguito, è impostato due volte quando testato per, o una volta per impostazione predefinita, e non è impostato quando si stabiliscono le impostazioni predefinite canoniche.

# 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 controlla semplicemente se qualcosa risponde su una determinata porta e potrebbe apparire

#!/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

1
if-then-else in .ssh / config? Non ci avrei creduto !!
Archemar,

1

È possibile utilizzare la funzione jolly di ~.ssh/config, inserendo questa voce nell'elenco:

Host *
Port 5492

Ma questo non tornerà a 22 da solo.

Se lo metti alla fine, puoi comunque sovrascriverlo per quegli host di cui hai bisogno 22 mettendo un valore diverso sopra di esso. (E puoi sempre sovrascriverlo dalla riga di comando.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.