Come cambiare la porta sshd su Mac OS X?


53

Voglio cambiare quale porta sshdutilizza su un server Mac. Ad esempio, diciamo dalla porta 22 alla porta 32.

La modifica /etc/sshd_confignon sembra funzionare. Qualcuno sa come cambiarlo? Preferirei un metodo compatibile con tutte le versioni di OSX (o il maggior numero possibile, almeno).


Si noti inoltre che /usr/libexec/sshd-keygen-wrapper(mostrato nelle liste seguenti) è possibile avviare un SSH diverso da quello specificato nella scheda stessa. Se lo gatto, inizia sempre /usr/sbin/sshd.

Risposte:


61

Ogni risposta precedente funziona (come suggerisce anche Google), ma sono sporchi e ineleganti .

Il modo giusto per cambiare la porta di ascolto per un servizio gestito launchd su Mac OS X è rendere disponibili le modifiche alle chiavi dedicate in ssh.plist

Quindi la soluzione è semplice come utilizzare il numero di porta invece del nome del servizio.

Un estratto dal mio modificato /System/Library/LaunchDaemons/ssh.plist:

    <key>Sockets</key>
    <dict>
            <key>Listeners</key>
            <dict>
                    <key>SockServiceName</key>
                    <string>22022</string>
                    <key>SockFamily</key>
                    <string>IPv4</string>
                    <key>Bonjour</key>
                    <array>
                            <string>22022</string>
                    </array>
            </dict>
    </dict>

Nota: per poter modificare questo file su El Capitan, Sierra e probabilmente anche nelle versioni future, è necessario disabilitare SIP (System Integrity Protection). Vedi Come disabilitare System Integrity Protection (SIP) [...] .

La modifica sopra forzerà anche sshd ad ascoltare solo su IPV4.

Dopo aver apportato le modifiche a ssh.plist, il file deve essere ricaricato come segue:

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

Si noti che l'utilizzo launchctl stop ...e launchctl start ...NON ricaricherà questo file.

La pagina man con maggiori informazioni può essere trovata digitando man launchd.plisto usando questo link .


3
@Yar launchd.plist è il nome del manuale. La modifica è nel file ssh.plist in / Sistema / Libreria / LaunchDaemons
Martijn Pieters

1
Prendo atto che è necessario riavviare la macchina o riavviare il servizio ssh con launchctl.
Danny Staple,

5
Grr ... ogni aggiornamento di OS X (Yosemite in questo caso) ignora questa modifica, richiedendomi di ricordare cosa ho fatto l'ultima volta per ripararlo e dove ho trovato queste informazioni. Grazie per la correzione!
Michael,

2
@Hassan devi avviare due istanze ssh .. cioè aggiungere un altro Listener con nome e valore SockServiceName diversi
drAlberT

5
Si noti che sulla versione di El Capitan (e probabilmente anche nelle versioni future) è necessario disabilitare SIP (System Integrity Protection) prima di poter modificare il file, consultare: apple.stackexchange.com/a/208481
jcfrei

17

Se si desidera che sshd ascolti su una porta aggiuntiva, è possibile aggiungere più voci al dizionario Socket.

Esempio:

<key>Sockets</key>
<dict>
        <key>Listeners</key>
        <dict>
                <key>SockServiceName</key>
                <string>ssh</string>
                <key>Bonjour</key>
                <array>
                        <string>ssh</string>
                        <string>sftp-ssh</string>
                </array>
        </dict>
        <key>Listeners2</key>
        <dict>
                <key>SockServiceName</key>
                <string>22022</string>
        </dict>
</dict>

1
Per chiarezza, @Raim si riferisce a:/System/Library/LaunchDaemons/ssh.plist
Mike Causer,

Qual è lo scopo della chiave Bonjour?

Anche a me piacerebbe sapere qual è lo scopo della chiave Bonjour?
Estratto il

Che diavolo è 20022?
Jamie Hutber,

1
Scopo della chiave Bonjour: questa chiave opzionale può essere utilizzata per richiedere la registrazione del servizio con il sottosistema Bonjour. Come detto da man launchd.plist.
Scott Willeke,

6

Da quello che ho letto (e sperimentato) finora, ci sono tre metodi principali che possono essere utilizzati:

  1. modificare l'impostazione nel file ssh.plist;
  2. cambiare l'impostazione nel file / etc / services;
  3. cambia l'impostazione nel file /etc/sshd.conf.

Un altro modo per farlo, che personalmente preferisco di gran lunga a tutti e ciascuno di questi metodi, perché evita di fare casino con i file di sistema di Mac OS X è usare socat per reindirizzare la porta 22 a qualunque porta tu voglia.

  1. Scarica socat: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Sposta il file tar.gz nella tua directory / usr / local / ( sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. Vai alla tua directory / usr / local / bin ( cd /usr/local/bin)
  4. uncompress: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Passa alla directory del file non compresso: cd ./socat-1.7.3.2
  6. Esegui la solita configurazione, make e make install per installare socat ( sudo ./configure && sudo make && sudo make install)
  7. Reindirizzare la porta 22 (predefinita ssh) a qualsiasi porta desiderata (nel seguente esempio, 2222) utilizzando l'opzione corretta inviando una chiamata socat ( sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

Il gioco è fatto e i file di sistema di mac os x rimangono invariati. Inoltre, questo metodo funziona non solo su Snow Leopard, ma su tutte le versioni di Mac OS X e anche su qualsiasi macchina su cui è possibile eseguire socat.

L'ultima cosa che devi fare se usi un router / firewall è includere i comandi di reindirizzamento corretti nel tuo router / firewall.

Inoltre, evita di rimanere bloccato nel dibattito se il metodo ssh.plist, il metodo services o il metodo qualunque sia migliore, più elegante o peggiore dell'altro.

È inoltre possibile preparare facilmente uno script che viene eseguito all'avvio per ricostruire il reindirizzamento socat ogni volta che si riavvia il computer. Metti questo in /Library/LaunchDaemons/com.serverfault.sshdredirect.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.serverfault.sshdredirect</string>
    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/socat</string>
        <string>TCP-LISTEN:2222,reuseaddr,fork</string>
        <string>TCP:localhost:22</string>
    </array>
</dict>
</plist>

Utilizzare sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistper caricarlo. Verrà caricato automaticamente su riavvii futuri.

Inoltre, puoi anche migliorare la sicurezza (i) impostando il firewall in modo da bloccare qualsiasi connessione alla tua porta 22 da qualsiasi altra interfaccia diversa dal loopback (127.0.0.1) e (ii) apportare una modifica simile al tuo file sshd.conf su ascolta ssh solo sul loopback.

Godere.


2
La modifica del /etc/servicesfile è una cattiva idea: influenzerà cose come l'accesso alla chiave SSH al tuo account github o bitbucket, che cercherà di connettersi alla nuova porta e fallire.
ccpizza,

1
Dovresti compilare in una directory scratch. Quindi utilizzare sudoper installare. Non dovresti costruire con privilegi elevati.

Questo funziona anche su El Capitan dove SIP rende difficile cambiare /System/Library/LaunchDaemons/ssh.plist. Ma su El Capitan la chiave "NetworkState" è obsoleta; Io suggerisco <key>KeepAlive</key><true/>.
RTS - leggi di Monica Cellio il

con l'ultimo osx sierra, la versione funzionante è: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu

1

Non ho potuto vederlo documentato correttamente da nessuna parte in una pagina man, ma se non si desidera fare altro che aggiungere un ascoltatore aggiuntivo, è possibile utilizzare una serie di ascoltatori e avere un dict extra. Questo non richiede la modifica di / etc / services se usi direttamente la porta (ma ricorda di aprire la porta sul tuo firewall!)

    <key>Listeners</key>
    <array>
    <dict>
        <key>Bonjour</key>
        <array>
            <string>ssh</string>
            <string>sftp-ssh</string>
        </array>
        <key>SockServiceName</key>
        <string>ssh</string>
    </dict>
    <dict>
        <key>SockServiceName</key>
        <string>22222</string>
    </dict>
    </array>

1
Qual è lo scopo della chiave Bonjour?

@jww Penso che sia un errore di copia e incolla da quando stavo mettendo insieme questo da altri ascoltatori.
Adam Prescott,

Anche a me piacerebbe sapere qual è lo scopo della chiave Bonjour?
Estratto il

1
Scopo della chiave Bonjour: questa chiave opzionale può essere utilizzata per richiedere la registrazione del servizio con il sottosistema Bonjour. Come detto da man launchd.plist.
Scott Willeke,
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.