sviluppo-web-qa.it

Come cambiare la porta ssh su Mac OS X?

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

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

54

Ogni risposta precedente funziona (come suggerisce anche Google), ma sono sporca e inelegante.

Il modo giusto per cambiare la porta di ascolto per un servizio gestito launchd su Mac OS X è rendere le modifiche le chiavi dedicate disponibili 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, devi 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 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

Nota che usando launchctl stop ... e launchctl start ... NON ricaricherà questo file.

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

62
drAlberT

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>
17
raimue

Da quello che ho letto (e vissuto) 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. Non comprimere: 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 (predefinito 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 qualunque sia il metodo 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>

Uso Sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plist per 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.

6
Cedric

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 dettato 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
Adam Prescott