Como alterar a porta sshd no Mac OS X?

53

Quero alterar qual porta sshdusa em um servidor Mac. Por exemplo, digamos da porta 22 à porta 32.

A edição /etc/sshd_configparece não funcionar. Alguém sabe como mudar isso? Eu preferiria um método compatível com todas as versões do OSX (ou o maior número possível, pelo menos).

Alexander Artemenko
fonte
Observe também que /usr/libexec/sshd-keygen-wrapper(mostrado nas listas abaixo) pode iniciar um SSH diferente do especificado na própria lista. Se você gosta, sempre começa /usr/sbin/sshd.

Respostas:

61

Todas as respostas anteriores estão funcionando (como o Google sugere também), mas são sujas e deselegantes .

A maneira correta de alterar a porta de atendimento de um serviço gerenciado pela inicialização no Mac OS X é disponibilizar as alterações nas teclas dedicadas em ssh.plist

Portanto, a solução é tão simples quanto usar o número da porta em vez do nome do serviço.

Um trecho do meu editado /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: para poder editar este arquivo no El Capitan, Sierra e provavelmente em versões futuras, você precisa desativar o SIP (System Integrity Protection). Consulte Como desabilito a proteção de integridade do sistema (SIP) [...] .

A edição acima também forçará o sshd a ouvir apenas pelo IPV4.

Após fazer alterações ssh.plist, o arquivo deve ser recarregado da seguinte maneira:

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

Observe que o uso launchctl stop ...e launchctl start ...NÃO recarregará esse arquivo.

A página de manual com mais informações pode ser encontrada digitando man launchd.plistou usando este link .

drAlberT
fonte
3
@Yar launchd.plist é o nome do manual. A alteração está no arquivo ssh.plist em / System / Library / LaunchDaemons
Martijn Pieters
11
Observo que você precisa reiniciar a máquina ou reiniciar o serviço ssh com o launchctl.
Danny Staple
5
Grr ... toda atualização do OS X (neste caso, Yosemite) descarta essa alteração, obrigando-me a lembrar o que fiz na última vez para corrigi-la e onde encontrei essas informações. Obrigado pela correção!
Michael Michael
2
@ Hasan, você precisa iniciar duas instâncias ssh ... ou seja, adicionar outro ouvinte com nome e valor diferente de SockServiceName
#
5
Observe que na versão El Capitan (e provavelmente também em versões futuras) você precisa desativar o SIP (System Integrity Protection) antes de poder editar o arquivo, consulte: apple.stackexchange.com/a/208481
jcfrei
17

Se você quiser que o sshd escute em uma porta adicional, poderá adicionar várias entradas ao dicionário de soquetes.

Exemplo:

<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>
raimue
fonte
11
Para maior clareza, @Raim está se referindo a:/System/Library/LaunchDaemons/ssh.plist
Mike Causer
Qual é o objetivo da chave Bonjour?
Também gostaria de saber qual é o objetivo da chave Bonjour?
Drew
O que diabos é 20022?
Jamie Hutber
11
O objetivo da chave Bonjour: Essa chave opcional pode ser usada para solicitar que o serviço seja registrado no subsistema Bonjour. Como dito por man launchd.plist.
Scott Willeke 20/06
6

Pelo que li (e experimentei) até agora, existem três métodos principais que podem ser usados:

  1. altere a configuração no arquivo ssh.plist;
  2. altere a configuração no arquivo / etc / services;
  3. altere a configuração no arquivo /etc/sshd.conf.

Outra maneira de fazer isso, que eu pessoalmente prefiro a todos e a cada um desses métodos, porque evita mexer nos arquivos de sistema do Mac OS X é usar o socat para redirecionar a porta 22 para a porta que você desejar.

  1. Faça o download do socat: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Mova o arquivo tar.gz para o seu diretório / usr / local / ( sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. Vá para o diretório / usr / local / bin ( cd /usr/local/bin)
  4. Descomprimir: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Mova para o diretório de arquivo descompactado: cd ./socat-1.7.3.2
  6. Execute a configuração usual, faça e faça install para instalar socat ( sudo ./configure && sudo make && sudo make install)
  7. Redirecione a porta 22 (ssh padrão) para qualquer porta que você deseja (no exemplo a seguir, 2222) usando a opção correta enviando uma chamada socat ( sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

Você terminou e seus arquivos de sistema do Mac OS X permanecem inalterados. Além disso, esse método funciona não apenas no Snow Leopard, mas em todas as versões do Mac OS X e também em qualquer máquina na qual o socat possa ser executado.

A última coisa que você precisa fazer se usar um roteador / firewall é incluir os comandos de redirecionamento corretos no seu roteador / firewall.

Além disso, evita ficar preso no debate se o método ssh.plist, o método de serviços ou o método que é melhor, mais elegante ou pior que o outro.

Você também pode preparar facilmente um script que é executado na inicialização para reconstruir o redirecionamento socat cada vez que você reinicia sua máquina. Coloque isso em /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>

Use sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistpara carregá-lo. Ele será carregado automaticamente em futuras reinicializações.

Além disso, você também pode melhorar a segurança (i) configurando seu firewall para bloquear qualquer conexão com a porta 22 de qualquer outra interface que não seja o loopback (127.0.0.1) e (ii) faça uma alteração semelhante no seu arquivo sshd.conf para faça com que o ssh escute apenas no loopback.

Desfrutar.

Cedric
fonte
2
Editar o /etc/servicesarquivo é uma péssima idéia - isso afetará coisas como o login da chave SSH nas contas do github ou do bitbucket, que tentarão se conectar à nova porta e falharão.
Ccpizza
11
Você deve construir em um diretório inicial. Em seguida, use sudopara instalar. Você não deve construir com privilégios elevados.
Isso também funciona no El Capitan, onde o SIP dificulta a alteração do /System/Library/LaunchDaemons/ssh.plist. Mas, no El Capitan, a chave "NetworkState" está obsoleta; Eu sugiro <key>KeepAlive</key><true/>.
RTS - leia sobre Monica Cellio
com a mais recente OSX serra, a versão de trabalho é: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu
1

Não consegui ver isso documentado em nenhum lugar da página do manual, mas se você quiser fazer nada além de adicionar um ouvinte extra, poderá usar uma variedade de ouvintes e ter um ditado extra. Isso não requer edição do / etc / services se você usar a porta diretamente (mas lembre-se de abrir a porta no seu 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>
Adam Prescott
fonte
11
Qual é o objetivo da chave Bonjour?
@jww Eu acho que é um erro de copiar e colar de quando eu estava reunindo isso de outros ouvintes.
21816 Adam Prescott
Também gostaria de saber qual é o objetivo da chave Bonjour?
Drew
11
O objetivo da chave Bonjour: Essa chave opcional pode ser usada para solicitar que o serviço seja registrado no subsistema Bonjour. Como dito por man launchd.plist.
Scott Willeke 20/06