Cómo SSH en un puerto que no sea el 22

151

Tengo dos computadoras detrás del mismo enrutador. Llamémoslos A y B.

A puede SSH a B de la siguiente manera: ssh usr@<internal ip of computer>

B puede hacer SSH a A haciendo lo mismo, pero se debe usar la IP externa. He reenviado el puerto 22 de mi enrutador a la IP de la computadora A, para que todo tenga sentido para mí.

Sin embargo, también quiero reenviar el puerto 26 a la computadora B, y SSH desde fuera de la red usando la IP externa para ambos, pero especificando el puerto 22 o 26, para seleccionar efectivamente qué computadora usar.

He intentado permitir el puerto 26 a través de la SALIDA de iptablesA y la ENTRADA de B, pero eso no pareció funcionar. También he reenviado el puerto 26 a la IP interna de B (a través del enrutador), como hice con 22 para A.

Esto es lo que obtengo cuando intento SSH de A a B usando la IP externa y el puerto 26:

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

Versiones

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

A tiene 12.04 Ubuntu, B es una Raspberry Pi con Raspbian.

EDITAR: Algo que olvidé poner: intenté cambiar el archivo de configuración SSH (descubrí que es /etc/ssh/ssh_config), descomenté (eliminé #) la línea Porty cambié 22a 26. Me dio el mensaje de conexión rechazada todavía. (Reinicié en vano).

Gary
fuente
¿Tiene usted SSH ejecutándose en el puerto 22 o 26 en la segunda máquina?
Nerdfest
1
Tenga en cuenta que / etc / ssh / ssh_config es la configuración del cliente ssh. Donde como / etc / ssh / sshd_config es la configuración del demonio ssh.
steakunderscore

Respuestas:

45

Parece que no estás ejecutando SSH en el puerto 26 en la segunda máquina. Puede cambiar el número de puerto en esa máquina a 26.

Edite /etc/ssh/sshd_configy no olvide reiniciar SSH o dejarlo en 22, pero reenvíe el puerto 26 en el enrutador al puerto 22 en la segunda máquina. Además, no olvide cambiar la configuración del firewall en la segunda máquina para permitir las conexiones.

Nerdfest
fuente
Ahhh ... entonces sshd_config debe cambiar, no ssh_config?
Gary
2
Correcto. sshd es el servicio (d es para daemon). Edite el archivo de configuración (con sudo gedit), luego reinicie el servicio con "sudo service ssh restart".
Nerdfest
2
Resuelve el problema. Tampoco tuve que cambiar ninguna configuración de firewall.
Gary
372

Si está en un sistema Linux y desea conectarse a un servidor SSH en el puerto 26, puede usar el siguiente comando.

ssh [email protected] -p 26

Nota:

  1. Reemplace la IP del servidor con la dirección IP o el nombre DNS de su servidor.
  2. Cambie su número de puerto como lo ha configurado.
  3. si está utilizando un puerto SSH personalizado, entonces se permitirá el mismo puerto para la conexión entrante y saliente en el firewall; de lo contrario, la conexión no se establecerá
Shiv Singh
fuente
17
Este debe estar marcado como correcto.
ken_oy
1
Estoy de acuerdo en que esta es la respuesta correcta. Este es simple y va al grano.
m4l490n el
1
@gary marca este como correcto
poesía
77
No, esta NO es la respuesta correcta. OP tuvo problemas con el demonio no escuchando en el puerto deseado. Claramente pidió ayuda con el servidor SSH y / o la configuración NAT, pero la respuesta actual ignora la publicación original y describe la opción de comando del cliente ya conocida por OP. Me pregunto cómo esta respuesta obtuvo tantos votos positivos.
nnovich-OK
2
Esto es correcto para la mayoría, pero no es correcto para el problema de OP.
Ultrasonic54321
9

Yo uso el puerto 22 solo para el acceso ssh de intranet.

Para acceder a través de Internet, uso un puerto personalizado (inusual). Esto tiene el beneficio de reducir la carga producida por los niños de script que están escaneando el puerto 22 en busca de "nombres de usuario conocidos".

Los procesos sshd externos están controlados xinetdy se ejecutan en paralelo al proceso interno sshd . En el siguiente ejemplo, uso el puerto 12345:

Puede cambiar esto a cualquier número de puerto libre disponible en su sistema. Tal vez un valor más alto hará que sea un poco más improbable que este puerto sea escaneado por un "escaneo de puerto rápido" .

La xinetdconfiguración es:

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
}

El archivo /etc/ssh/external-ssdh.configpuede ser una copia de su sshdconfiguración habitual . Asegúrese de que las siguientes declaraciones estén configuradas:

Port 12345
AddressFamily inet

También sugiero aplicar la autenticación de clave pública y deshabilitar la autenticación de contraseña para el acceso a Internet:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
H.-Dirk Schmitt
fuente
7

Los puertos de escucha también pueden estar vinculados a direcciones IP

/ etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444
OasisInDesert
fuente
Esto debería ser un comentario, no una respuesta.
Pablo Pazos
1

Como he explicado en una respuesta relacionada , el cliente ssh permite especificar el formato URI como ssh://user@host:1234. Por ejemplo:

ssh  ssh://[email protected]:2222

donde 2222 es el número de puerto. Sustituya el número de puerto que pretende utilizar en su lugar. Por supuesto, recuerde que para conectarse al servidor ssh del puerto especificado (en el host al que está intentando conectarse) tiene que escuchar en el puerto especificado en primer lugar

Sergiy Kolodyazhnyy
fuente
0

No es una buena idea ejecutar ssh en el puerto predeterminado (TCP / 22), ni reenviar desde WAN IP 22 a cualquier puerto que use ssh-server en LAN IP.

En un sentido más general, conectarse al servicio ssh-server debería estar escuchando en ese puerto. Tienes que

  1. Editar en /etc/ssh/sshd_config( tenga en cuenta la d ) de #Port 22a Port 26. Es decir, descomentar y cambiar el puerto. Quizás mejor que 26 sería algo al azar arriba , como 42895.
  2. Reinicie el servicio ssh-server

    sudo systemctl restart sshd.service
    

Luego, desde ssh-client podrás conectarte

ssh user@serverNameOrIP -p 42895

Prima: mosh

Si el paquete mosh está instalado en el servidor, entonces usa

mosh --ssh="ssh -p 42895" serverNameOrIP
Pablo A
fuente