Come eseguire SSH su una porta diversa da 22


151

Ho due computer dietro lo stesso router. Chiamiamoli A e B.

Una lattina da SSH a B nel modo seguente: ssh usr@<internal ip of computer>

B può SSH su A facendo lo stesso, ma è necessario utilizzare l'IP esterno. Ho inoltrato la porta 22 del mio router all'IP del computer A, in modo che tutto abbia senso per me.

Tuttavia, desidero anche inoltrare la porta 26 al computer B e SSH dall'esterno della rete utilizzando l'IP esterno per entrambi, ma specificando la porta 22 o 26, per selezionare in modo efficace quale computer utilizzare.

Ho provato a consentire la porta 26 tramite OUTPUT di iptablessu A e INPUT di B, ma non sembra funzionare. Ho anche inoltrato la porta 26 all'IP interno di B (tramite il router), come ho fatto con 22 per A.

Ecco cosa ottengo quando provo a SSH da A a B utilizzando l'IP esterno e la porta 26:

ssh: connect to host xx.xx.xxx.xx port 26: Connection refused.

versioni:

  • A = OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 marzo 2012
  • B = OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c 10 maggio 2012

A ha 12.04 Ubuntu, B è un Raspberry Pi con Raspbian.

EDIT: Qualcosa che ho dimenticato di inserire: ho provato a cambiare il file di configurazione SSH (ho scoperto che lo è /etc/ssh/ssh_config) ho decommentato (cancellato #) la linea con Porte cambiato 22in 26. Mi ha dato ancora il messaggio di rifiuto della connessione. (Ho riavviato inutilmente.)


Hai SSH in esecuzione sulla porta 22 o 26 sulla seconda macchina?
Nerdfest

1
Nota che / etc / ssh / ssh_config è la configurazione del client ssh. Dove as / etc / ssh / sshd_config è la configurazione del demone ssh.
steakunderscore

Risposte:


45

Sembra che non stai eseguendo SSH sulla porta 26 della seconda macchina. È possibile modificare il numero di porta su quella macchina su 26.

Modifica /etc/ssh/sshd_confige non dimenticare di riavviare SSH o lasciarlo su 22, ma inoltra la porta 26 sul router alla porta 22 sul secondo computer. Inoltre, non dimenticare di modificare le impostazioni del firewall sul secondo computer per consentire le connessioni.


Ahhh ... quindi sshd_config deve cambiare, non ssh_config?
Gary

2
Corretta. sshd è il servizio (d è per demone). Modifica il file di configurazione (con sudo gedit), quindi riavvia il servizio con "sudo service ssh restart".
Nerdfest

2
Problema risolto. Non è stato necessario modificare alcuna impostazione del firewall.
Gary

372

Se si utilizza un sistema Linux e si desidera connettersi a un server SSH sulla porta 26, è possibile utilizzare il comando seguente.

ssh user@192.168.1.1 -p 26

Nota:

  1. Sostituisci l'IP del server con l'indirizzo IP o il nome DNS del tuo server.
  2. Cambia il tuo numero di porta come hai impostato.
  3. se si utilizza la porta SSH personalizzata, la stessa porta sarà la maggior parte consentita per la connessione in entrata, in entrata sul firewall, altrimenti la connessione non verrà stabilita

17
Questo dovrebbe essere contrassegnato come corretto.
ken_oy,

1
Sono d'accordo che questa è la risposta corretta. Questo è semplice e va al punto.
m4l490n,

1
@gary contrassegna questo come corretto
poesia del dolore

7
No, questa NON è la risposta corretta. OP ha avuto problemi con il demone non in ascolto sulla porta desiderata. Chiese chiaramente aiuto con il server SSH e / o la configurazione NAT, ma la risposta corrente ignora il post originale e descrive l'opzione di comando client già nota a OP. Mi chiedo come questa risposta abbia ottenuto così tanti voti.
nnovich-OK,

2
Questo è corretto per la maggior parte, ma non è corretto per il problema di OP.
Ultrasonic54321

9

Uso la porta 22 solo per l'accesso ssh alla intranet.

Per l'accesso via internet uso una porta personalizzata (insolita). Questo ha il vantaggio di ridurre il carico generato dai bambini script che stanno eseguendo la scansione della porta 22 per "nomi utente ben noti".

I processi sshd esterni sono controllati xinetde in esecuzione in parallelo al processo interno sshd . Nel seguente esempio utilizzo la porta 12345:

Sei libero di cambiarlo con qualsiasi numero di porta libero disponibile sul tuo sistema. Forse un valore più alto renderà anche un po 'più improbabile che questa porta sia scansionata da una "scansione della porta rapida" .

La xinetdconfigurazione è:

service ssh-external
{
    socket_type = stream
    wait = no
    protocol = tcp
    type = UNLISTED
    user = root
    server = /usr/sbin/sshd
    server_args = -i -f  /etc/ssh/external-sshd.config
    port = 12345
    log_on_failure += USERID
}

Il file /etc/ssh/external-ssdh.configpuò essere una copia della tua solita sshdconfigurazione. Assicurarsi che siano configurate le seguenti istruzioni:

Port 12345
AddressFamily inet

Suggerisco anche di imporre l'autenticazione con chiave pubblica e disabilitare l'autenticazione con password per l'accesso a Internet:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no

7

Le porte di ascolto possono anche essere strettamente collegate agli indirizzi IP

/ Etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444

questo dovrebbe essere un commento, non una risposta.
Pablo Pazos,

1

Come ho spiegato in una risposta correlata , ssh client consente di specificare il formato URI come ssh://user@host:1234. Per esempio:

ssh  ssh://myuser@mydomain.com:2222

dove 2222 è il numero di porta. Sostituire invece il numero di porta che si intende utilizzare. Naturalmente, ricorda che per connettersi alla porta specificata, il server ssh (sull'host a cui stai tentando di connettersi) deve prima ascoltare sulla porta specificata


0

Non è una buona idea eseguire ssh sulla porta predefinita (TCP / 22), né inoltrare da WAN IP 22 a qualunque porta stia usando ssh-server su LAN IP.

In senso più generale, connettersi al servizio ssh-server dovrebbe essere in ascolto su quella porta. Devi

  1. Modifica su /etc/ssh/sshd_config( nota la d ) da #Port 22a Port 26. Cioè, decommenta e cambia la porta. Forse meglio di 26 sarebbe qualcosa di casuale sopra , come 42895.
  2. Riavviare il servizio ssh-server

    sudo systemctl restart sshd.service
    

Quindi da ssh-client sarai in grado di connetterti

ssh user@serverNameOrIP -p 42895

Bonus: mosh

Se il pacchetto mosh è installato sul server, allora si usa

mosh --ssh="ssh -p 42895" serverNameOrIP
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.