Mac OS X'te sshd portu nasıl değiştirilir?


53

sshdBir Mac sunucusunda hangi portun kullanılacağını değiştirmek istiyorum . Örneğin, 22 numaralı bağlantı noktasından 32 numaralı bağlantı noktasına diyelim.

Düzenleme /etc/sshd_configişe yaramadı. Nasıl değiştirileceğini bilen var mı? Tüm OSX sürümleriyle uyumlu bir yöntemi tercih ederim (veya mümkün olduğu kadar çok).


Ayrıca /usr/libexec/sshd-keygen-wrapper(aşağıdaki açıklamada gösterilmektedir), açıklığın kendisinde belirtilenden farklı bir SSH başlatabildiğini unutmayın . Eğer onu kedi, her zaman başlar /usr/sbin/sshd.

Yanıtlar:


61

Her önceki cevap çalışıyor (google’ın önerdiği gibi), ancak kirli ve davetsiz .

Mac OS X'te piyasaya sürülen bir servis için dinleme portunu değiştirmenin doğru yolu, değişiklikleri özel tuşların bulunduğu ssh.plist

Bu nedenle çözüm, hizmet adı yerine bağlantı noktası numarasını kullanmak kadar basittir.

Düzenlenenlerimden bir alıntı /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>

Not: Bu dosyayı El Capitan, Sierra ve muhtemelen gelecekteki sürümlerinde düzenleyebilmek için SIP'yi (Sistem Bütünlüğü Koruması) devre dışı bırakmanız gerekir. Bkz. Sistem Bütünlüğü Korumasını (SIP) nasıl devre dışı bırakırım [...] .

Yukarıdaki düzenleme ayrıca sshd'yi sadece IPV4 üzerinden dinlemeye zorlar.

Herhangi bir değişiklik yaptıktan sonra ssh.plist, dosya aşağıdaki gibi yeniden yüklenmelidir:

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

Bu dosyayı kullanarak launchctl stop ...ve launchctl start ...yeniden yüklemeyeceğinizi unutmayın .

Daha fazla bilgi içeren man sayfasını bu linki yazarak man launchd.plistveya kullanarak bulabilirsiniz .


3
@Yar launchd.plist kılavuzun adıdır. Değişiklik, ssh.plist dosyasında / / System / Library / LaunchDaemons
Martijn Pieters

1
Makineyi yeniden başlatmanız veya ssh servisini launchctl ile yeniden başlatmanız gerektiğini unutmayın.
Danny Staple,

5
Grr ... OS X'in her güncellemesi (bu durumda Yosemite), bu düzeltmeyi reddetti, en son ne yaptığımı ve bu bilgiyi nerede bulduğumu hatırlamamı istedi. Düzeltme için teşekkürler!
Michael

2
@Hassan iki ssh örneğini başlatmanız gerekiyor .. yani farklı SockServiceName adı ve değeri olan başka bir Dinleyici ekleyin
drAlberT

5
El Capitan sürümünde (ve muhtemelen gelecek sürümlerde de) dosyayı düzenlemeden önce SIP'yi
jcfrei

17

Eğer sshd'nin ek bir portta dinlemesini istiyorsanız, Sockets sözlüğüne birden fazla giriş ekleyebilirsiniz.

Örnek:

<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
Netlik için, @Raim atıfta bulunur:/System/Library/LaunchDaemons/ssh.plist
Mike Causer

Bonjour anahtarının amacı nedir?

Ben de bilmek isterdim, Bonjour anahtarının amacı nedir?
Drew

20022 de ne?
Jamie Hutber

1
Bonjour anahtarının amacı: Bu isteğe bağlı anahtar, hizmetin Bonjour alt sistemine kaydedilmesini istemek için kullanılabilir. Tarafından söylendiği gibi man launchd.plist.
Scott Willeke

6

Şu ana kadar okuduklarımdan (ve yaşadıklarımdan), kullanılabilecek üç ana yöntem var:

  1. ssh.plist dosyasındaki ayarı değiştirin;
  2. / etc / services dosyasındaki ayarları değiştir;
  3. /etc/sshd.conf dosyasındaki ayarları değiştirin.

Kişisel olarak bu yöntemlerin hepsini ve her birini tercih ettiğimden başka bir yol, çünkü Mac OS X sistem dosyalarını karıştırmaktan kaçınıyor, 22 numaralı bağlantı noktasını istediğiniz bağlantı noktasına yönlendirmek için socat kullanıyor.

  1. Socat'ı indirin: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Tar.gz dosyasını / usr / local / dizinine ( sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz) taşıyın
  3. / Usr / local / bin dizinine ( cd /usr/local/bin) gidin
  4. sıkıştırmasını: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Sıkıştırılmamış dosya dizinine taşı: cd ./socat-1.7.3.2
  6. Socat ( sudo ./configure && sudo make && sudo make install) işlevini yüklemek için olağan configure, make ve install komutlarını çalıştırın.
  7. Bir socat araması ( sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22) göndererek doğru seçeneği kullanarak bağlantı noktasını 22 (varsayılan ssh) istediğiniz bağlantı noktasına yönlendirin (aşağıdaki örnekte, 2222 )

İşiniz bitti ve mac os x sistem dosyalarınız değişmeden kaldı. Ayrıca, bu yöntem yalnızca Snow Leopard'da değil, Mac OS X'in tüm sürümlerinde ve ayrıca socat'ın çalışabileceği herhangi bir makinede çalışır.

Bir yönlendirici / güvenlik duvarı kullanıyorsanız yapmanız gereken en son şey yönlendiricinize / güvenlik duvarınıza doğru yönlendirme komutlarını eklemektir.

Ayrıca, ssh.plist yönteminin, hizmet yönteminin veya herhangi bir yöntemin diğerinden daha iyi, daha zarif veya daha kötü olup olmadığı tartışmalarına sıkışmaktan kaçınır.

Makinenizi her başlattığınızda socat yönlendirmesini yeniden oluşturmak için başlangıçta çalıştırılan bir komut dosyasını kolayca da hazırlayabilirsiniz. Bunu içine yerleştirin /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>

sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistYüklemek için kullanın . Gelecekteki yeniden başlatmaları otomatik olarak yükleyecektir.

Ek olarak, (i) güvenlik duvarınızı 22 numaralı bağlantı noktanızla bağlantılarını geridöngü (127.0.0.1) dışındaki herhangi bir arabirimden gelen bağlantıları engellemek ve sshd.conf dosyanızda benzer bir değişiklik yapmak üzere güvenlik duvarınızı ayarlayarak da artırabilirsiniz. ssh sadece geridönüşümde dinlesin.

Keyfini çıkarın.


2
/etc/servicesDosyayı düzenlemek kötü bir fikirdir - SSH anahtarının github veya bitbucket hesaplarınıza giriş yapması gibi etkileyecektir, bu da yeni bağlantı noktasına bağlanıp başarısız olmaya çalışacaktır.
ccpizza

1
Bir karalama dizini oluşturmalısınız. Sonra sudoyüklemek için kullanın . Yüksek ayrıcalıklarla inşa etmemelisiniz.

Bu aynı zamanda SIP'in /System/Library/LaunchDaemons/ssh.plist değiştirmesini zorlaştırdığı El Capitan'da da çalışır. Ancak, El Capitan'da "NetworkState" tuşu kullanımdan kaldırılmıştır; Öneririm <key>KeepAlive</key><true/>.
RTS - Monica

en son osx sierra ile çalışan versiyon şudur: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu

1

Bunu bir man sayfasının hiçbir yerinde doğru bir şekilde belgelendiğini göremedim, ancak fazladan bir dinleyici eklemekten başka bir şey yapmak istemiyorsanız, bir dizi dinleyici kullanabilir ve fazladan bir diske sahip olabilirsiniz. Bu, doğrudan bağlantı noktasını kullanırsanız / etc / services düzenleme gerektirmez (ancak güvenlik duvarınızdaki bağlantı noktasını açmayı unutmayın!)

    <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
Bonjour anahtarının amacı nedir?

@jww Bunu diğer dinleyicilerden bir araya getirdiğimde yapılan kopyala-yapıştır hatası olduğunu düşünüyorum.
Adam Prescott,

Ben de bilmek isterdim, Bonjour anahtarının amacı nedir?
Drew,

1
Bonjour anahtarının amacı: Bu isteğe bağlı anahtar, hizmetin Bonjour alt sistemine kaydedilmesini istemek için kullanılabilir. Tarafından söylendiği gibi man launchd.plist.
Scott Willeke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.