14 votos

No se puede cambiar el puerto ssh en High Sierra

Como tema: No puedo editar el archivo ssh.plist que se encuentra en /System/Library/LaunchDaemons. Quiero cambiar el puerto sshd.

He intentado utilizar "información" en el buscador y desbloquearlo. Esto no funcionó. Lo intenté:

Como Root, lo intenté..

macos:LaunchDaemons root# pwd && chown $USER ssh.plist 
/System/Library/LaunchDaemons
chown: ssh.plist: Operation not permitted

También traté de cp el archivo a mi propio escritorio, editarlo in situ y cp de nuevo.

macos:LaunchDaemons root# pwd && cp /Users/darren/Desktop/ssh.plist .
/System/Library/LaunchDaemons
cp: ./ssh.plist: Operation not permitted

Ya lo hice antes, hace tiempo. Creo que fue tal vez el anterior a Sierra, pero no recuerdo el "nombre en clave" de esa versión.

¿Ha bloqueado Apple definitivamente este archivo?

0 votos

Hola Darren, estaba revisando las preguntas abiertas y es posible que quieras upvote/marcar mi respuesta como aceptada, ya que, por tus comentarios, entiendo que resolvió tu problema. Marcar una pregunta como resuelta también ayuda a otros que tienen un problema similar, ya que muestra que tu pregunta tiene la respuesta que estabas buscando.

30voto

Phill Puntos 126

¿Ha bloqueado Apple este archivo [ /System/Library/LaunchDaemons/ssh.plist ¿ definitivamente?

Sí, lo han hecho, tienes que desactivar el SIP ( Protección de la integridad del sistema ), pero tenga en cuenta que la edición ssh.plist no es la única opción para cambiar el puerto del servidor SSH, hay otras formas de conseguir el mismo resultado.

Hay (al menos) 4 formas de cambiar el puerto sshd escucha en :

  1. Modificación de /System/Library/LaunchDaemons/ssh.plist :

    • Pros La forma más limpia de configurar sshd , sshd iniciado con Preferencias del Sistema>Compartir>Inicio de sesión remoto escucha en el nuevo puerto.

    • Cons : configuración enrevesada (requiere dos reinicios y deshabilitar/rehabilitar SIP ).

    • Caso de uso Cambio definitivo de sshd puerto.

  2. Creación de un nuevo plist /Library/LaunchDaemons/ssh2.plist :

    • Pros : operación doble de sshd escuchando en el puerto estándar y en el nuevo.

    • Cons : Método de inicio sólo por CLI sshd en el nuevo puerto.

    • Caso de uso : sshd debe escuchar tanto en el puerto estándar como en el puerto adicional.

  3. Modificación de las entradas "ssh" en /etc/services :

    • Pros Método más sencillo, sin necesidad de lidiar con el SIP, sshd iniciado con Preferencias del Sistema>Compartir>Inicio de sesión remoto escucha en el nuevo puerto.

    • Cons efecto secundario: ssh por defecto al nuevo puerto cuando se conecta al servidor remoto (hay una solución para ello).

    • Caso de uso : cambio de puerto temporal o pruebas sshd que se ejecuta en un puerto diferente.

  4. Redirigiendo el puerto 22 a un nuevo puerto con filtro de paquetes:

    • Pros no hay necesidad de lidiar con el SIP, sshd se inicia con Preferencias del Sistema>Compartir>Inicio de sesión remoto parece para escuchar en el nuevo puerto.

    • Cons : algo poco transparente ( sshd configuración está intacta, pero sshd escucha en otro/puerto adicional) y confuso (el estado del cortafuegos en las Preferencias del Sistema no es fiable), pequeño efecto secundario (el cliente remoto cree que se está conectando al puerto 22 (a través de las variables env SSH_CLIENT y SSH_CONNECTION )).

    • Caso de uso : cambio definitivo o temporal de la sshd puerto, sshd debe escuchar tanto en el puerto estándar como en el puerto adicional.

Veámoslos más de cerca. (Cuando elijas el nuevo puerto, asegúrate de que no es utilizado por otro servicio ejecutando sudo lsof -i -n -P | grep <your port> .)


1. Modificación de /System/Library/LaunchDaemons/ssh.plist

Este es el método que has probado, déjame describirlo aquí para completarlo:

  1. Reinicia tu Mac y mantén pulsado R inmediatamente después de que su Mac comience a reiniciarse para entrar Recuperación de MacOS .

  2. Seleccione Utilidades>Terminal en la barra de menú.

  3. Tipo csrutil disable para desactivar el SIP.

  4. Seleccione el menú Apple>Reiniciar.

  5. Iniciar sesión, editar /System/Library/LaunchDaemons/ssh.plist y modifique la sección de los oyentes. Por ejemplo, para cambiar el puerto a 2222 :

    enter image description here

  6. Reinicie su Mac y mantenga pulsado R inmediatamente después de que su Mac comience a reiniciarse para entrar en Recuperación de macOS.

  7. Seleccione Utilidades>Terminal en la barra de menú.

  8. Tipo csrutil enable para habilitar el SIP y reiniciar.

El servidor SSH escuchará ahora en el nuevo puerto y podrá iniciar sshd como es habitual a través de Preferencias del Sistema>Compartir>Inicio de sesión remoto.


2. Crear un nuevo plist /System/Library/LaunchDaemons/ssh2.plist

Este método está muy bien descrito en este respuesta que básicamente dice:

  1. Copiar /System/Library/LaunchDaemons/ssh.plist a /Library/LaunchDaemons/ssh2.plist para crear un nuevo sshd inicio script.

  2. Modificar la etiqueta en /Library/LaunchDaemons/ssh2.plist para diferenciar el nuevo script de inicio del incorporado, por ejemplo añadiendo un número "2":

    <key>Label</key>
    <string>com.openssh.sshd2</string>
  3. Modifique el puerto en la sección Listeners como en el método anterior. Por ejemplo, para cambiar el puerto a 2222:

    <key>Sockets</key>
    <dict>
       <key>Listeners</key>
       <dict>
          <key>SockServiceName</key>
          <string>2222</string>
          <key>Bonjour</key>
          <array>
              <string>ssh</string>
              <string>sftp-ssh</string>
          </array>
       </dict>
    </dict>
  4. Inicie sshd en el nuevo puerto:

    sudo launchctl load -w /Library/LaunchDaemons/ssh2.plist

    (Para detenerlo, ejecute sudo launchctl unload /Library/LaunchDaemons/ssh2.plist )

El servidor SSH escuchará ahora en el nuevo puerto. Puede seguir utilizando Preferencias del Sistema>Compartir>Inicio de sesión remoto para iniciar otra instancia del servidor SSH que escuche en el puerto estándar (22/tcp) . launchd escuchará en ambos puertos:

$ sudo lsof -i -P -n
launchd     1           root   42u  IPv6 0x9df385961b132cdf      0t0    TCP *:2222 (LISTEN)
launchd     1           root   44u  IPv4 0x9df385961c81db1f      0t0    TCP *:2222 (LISTEN)
launchd     1           root   45u  IPv6 0x9df385961b132cdf      0t0    TCP *:2222 (LISTEN)
launchd     1           root   47u  IPv4 0x9df385961c81db1f      0t0    TCP *:2222 (LISTEN)
launchd     1           root   48u  IPv6 0x9df385961b133e1f      0t0    TCP *:22 (LISTEN)
launchd     1           root   49u  IPv4 0x9df385961b22d51f      0t0    TCP *:22 (LISTEN)
launchd     1           root   50u  IPv6 0x9df385961b133e1f      0t0    TCP *:22 (LISTEN)
launchd     1           root   51u  IPv4 0x9df385961b22d51f      0t0    TCP *:22 (LISTEN)

3. Modificar las entradas "ssh" en /etc/services

Para cambiar el sshd puerto con este método, proceda como sigue:

  1. Editar /etc/services Busca estas entradas:

    ssh  22/udp  # SSH Remote Login Protocol
    ssh  22/tcp  # SSH Remote Login Protocol

    y sustituya el puerto 22 por un puerto de su elección.

Puede activar SSH con Preferencias del Sistema>Compartir>Inicio de sesión remoto y sshd escuchará en el nuevo puerto.

¿Por qué funciona esto? Si echas un vistazo a la sección de oyentes del /System/Library/LaunchDaemons/ssh.plist verá que sshd está configurado para escuchar en el puerto asignado al servicio llamado ssh en /etc/services :

<key>Sockets</key>
<dict>
    <ky>Listeners</key>
    <dict>
        <key>SockServiceName</key>
        <string>ssh</string>
(...)
</dict>

Este es sin duda el método más sencillo, pero tiene un inconveniente: el cliente SSH esperará que los servidores SSH remotos escuchen en el nuevo puerto (en lugar del puerto 22) (gracias a jcaron por la pista). Eso es, ssh lee /etc/services para saber cuál es el puerto SSH por defecto.

Afortunadamente existe una solución fácil para esto: descomentar Port 22 en /etc/ssh/ssh_config (ver man ssh_config para más información).


4. Redirigir el puerto 22 a un nuevo puerto con filtro de paquetes

El método utiliza el filtro de paquetes (PF) de MacOS para redirigir todas las peticiones recibidas en el puerto 22 al nuevo sshd (gracias a Andrew Morton por la idea):

  1. Crear un nuevo archivo de anclaje /etc/pf.anchors/sshd con el contenido (sustituir 2222 con un puerto de su elección):

    rdr pass inet proto tcp from any to any port = 2222 -> 127.0.0.1 port 22
    # If you want `sshd` to listen on port 22 too, comment out the line below
    block drop in quick proto tcp from any to any port = 22
  2. Añade las reglas de anclaje "sshd" editando /etc/pf.conf (¡el orden es relevante!):

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    # Load sshd redirect rule
    rdr-anchor "sshd"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    # Load other sshd rules
    anchor "sshd"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    # Tell PF where to find the sshd anchor
    load anchor "sshd" from "/etc/pf.anchors/sshd"
  3. Habilitar y recargar el filtro de paquetes:

    sudo pfctl -F all -ef /etc/pf.conf

    (Para desactivarlo, ejecute sudo pfctl -d .)

Tenga en cuenta que:

  • el cortafuegos de MacOS (Preferencias del Sistema>Seguridad y Privacidad>Cortafuegos) es bajo el capó el filtro de paquetes, por lo que cuando desactiva el filtro de paquetes en la línea de comandos, también está desactivando el cortafuegos, aunque el Panel de Preferencias no refleje el cambio.
  • Los clientes de SSH pensarán que se están conectando al puerto 22 a través de la SSH_CLIENT y SSH_CONNECTION variables ambientales.

Edición de sshd_config no funciona

Los usuarios que ejecutan sshd en otros sistemas operativos puede verse tentado a editar el archivo de configuración del demonio SSH, /etc/ssh/sshd_config . Sin embargo, en MacOS, editando el Port en la directiva /etc/ssh/sshd_config no conseguirá el resultado deseado .

1 votos

¿Tendría más sentido utilizar el cortafuegos para traducir el número de puerto? Sobre todo porque en /etc/services están los números de puerto asignados por la IANA: Puerto ssh no estándar: ¿debo editar /etc/servicios?

0 votos

@AndrewMorton Sí, me gusta tu idea y estoy de acuerdo, modificando /etc/services se siente como un hacker. Pero como alguien que ha tratado con el filtro de paquetes (PF) en el pasado, veo la edición /etc/services como la solución más sencilla y menos propensa a errores. Desgraciadamente, ssh.plist no admite la directiva Port definida en sshd_config que es, en mi opinión, la forma correcta de configurar el sshd (fue lo primero que probé, y me quedé desconcertado cuando vi que no funcionaba).

0 votos

Hace Reenvío de puertos en MacOS Sierra ¿también se aplica a High Sierra?

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X