Bagaimana cara mengubah port sshd pada Mac OS X?

53

Saya ingin mengubah port mana yang sshddigunakan pada server Mac. Misalnya, katakanlah dari port 22 ke port 32.

Pengeditan /etc/sshd_configtampaknya tidak berhasil. Adakah yang tahu cara mengubahnya? Saya lebih suka metode yang kompatibel dengan semua versi OSX (atau sebanyak mungkin, setidaknya).

Alexander Artemenko
sumber
Perhatikan juga bahwa /usr/libexec/sshd-keygen-wrapper(ditunjukkan dalam daftar di bawah) dapat memulai SSH yang berbeda dari yang ditentukan dalam daftar itu sendiri. Jika Anda menyukainya, itu selalu dimulai /usr/sbin/sshd.

Jawaban:

61

Setiap jawaban sebelumnya berfungsi (seperti yang disarankan Google juga), tetapi mereka kotor dan tidak sopan .

Cara yang tepat untuk mengubah port mendengarkan untuk layanan launchd yang ditangani pada Mac OS X adalah dengan membuat perubahan pada tombol khusus tersedia ssh.plist

Jadi solusinya sesederhana menggunakan nomor port bukan nama layanan.

Kutipan dari edit saya /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>

Catatan: untuk dapat mengedit file ini di El Capitan, Sierra dan mungkin versi yang akan datang juga, Anda harus menonaktifkan SIP (System Integrity Protection). Lihat Bagaimana cara menonaktifkan Perlindungan Integritas Sistem (SIP) [...] .

Hasil edit di atas juga akan memaksa sshd untuk mendengarkan hanya melalui IPV4.

Setelah melakukan perubahan ssh.plist, file harus dimuat ulang sebagai berikut:

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

Perhatikan bahwa menggunakan launchctl stop ...dan launchctl start ...TIDAK akan memuat ulang file ini.

Halaman manual dengan informasi lebih lanjut dapat ditemukan dengan mengetik man launchd.plistatau menggunakan tautan ini .

drAlberT
sumber
3
@Yar launchd.plist adalah nama manual. Perubahannya ada di file ssh.plist di / System / Library / LaunchDaemons
Martijn Pieters
1
Saya perhatikan bahwa Anda perlu me-restart mesin, atau me-restart layanan ssh dengan launchctl.
Danny Staple
5
Grr ... setiap peningkatan OS X (Yosemite dalam kasus ini) membuang perubahan ini, mengharuskan saya untuk mengingat apa yang saya lakukan terakhir kali untuk memperbaikinya, dan di mana saya menemukan info ini. Terima kasih untuk perbaikannya!
Michael
2
@Hassan Anda harus memulai dua instance ssh .. yaitu menambahkan Pendengar lain dengan nama dan nilai SockServiceName yang berbeda
drAlberT
5
Perhatikan bahwa pada versi El Capitan (dan mungkin di masa depan versi juga) Anda perlu menonaktifkan SIP (Sistem Perlindungan Integritas) sebelum Anda dapat mengedit file, lihat: apple.stackexchange.com/a/208481
jcfrei
17

Jika Anda ingin sshd mendengarkan pada port tambahan, Anda dapat menambahkan beberapa entri ke kamus Sockets.

Contoh:

<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
sumber
1
Untuk kejelasan, @Raim mengacu pada:/System/Library/LaunchDaemons/ssh.plist
Mike Causer
Apa tujuan dari kunci Bonjour?
Saya ingin tahu juga, apa tujuan dari kunci Bonjour?
Drew
Apa 20022?
Jamie Hutber
1
Tujuan dari kunci Bonjour: Kunci opsional ini dapat digunakan untuk meminta agar layanan terdaftar pada subsistem Bonjour. Seperti yang diceritakan oleh man launchd.plist.
Scott Willeke
6

Dari apa yang saya baca (dan alami) sejauh ini, ada tiga metode utama yang dapat digunakan:

  1. ubah pengaturan pada file ssh.plist;
  2. ubah pengaturan pada file / etc / services;
  3. ubah pengaturan pada file /etc/sshd.conf.

Cara lain untuk melakukannya, yang secara pribadi saya lebih suka untuk semua dan masing-masing metode ini, karena menghindari bermain-main dengan file sistem Mac OS X menggunakan socat untuk mengarahkan ulang port 22 ke port mana pun yang Anda inginkan.

  1. Unduh socat: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Pindahkan file tar.gz ke direktori / usr / local / ( sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. Buka direktori / usr / local / bin Anda ( cd /usr/local/bin)
  4. Tidak terkompresi: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Pindah ke direktori file yang tidak dikompresi: cd ./socat-1.7.3.2
  6. Jalankan konfigurasi yang biasa, buat, dan instal untuk menginstal socat ( sudo ./configure && sudo make && sudo make install)
  7. Redirect port 22 (ssh default) ke port apa pun yang Anda inginkan (dalam contoh berikut, 2222) menggunakan opsi yang benar dengan mengirim panggilan socat ( sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

Anda selesai dan file sistem mac os x Anda tidak berubah. Selain itu, metode ini tidak hanya berfungsi pada Snow Leopard, tetapi pada semua versi Mac OS X dan juga pada mesin apa pun yang menjalankan socat.

Hal terakhir yang perlu Anda lakukan jika Anda menggunakan router / firewall adalah memasukkan perintah pengalihan yang benar dalam router / firewall Anda.

Juga, ia menghindari terjebak dalam perdebatan apakah metode ssh.plist, metode layanan atau metode apa pun yang lebih baik, lebih elegan atau lebih buruk daripada yang lain.

Anda juga dapat dengan mudah menyiapkan skrip yang dijalankan saat start up untuk membangun kembali pengalihan socat setiap kali Anda me-restart mesin Anda. Tempatkan ini di /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>

Gunakan sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistuntuk memuatnya. Itu akan secara otomatis memuat pada reboot masa depan.

Selain itu, Anda juga dapat meningkatkan keamanan dengan (i) mengatur firewall Anda untuk memblokir koneksi ke port 22 Anda dari antarmuka lain selain loopback (127.0.0.1) dan (ii) membuat perubahan serupa di file sshd.conf Anda untuk minta ssh mendengarkan di loopback saja.

Nikmati.

Cedric
sumber
2
Mengedit /etc/servicesfile adalah ide yang buruk - itu akan memengaruhi hal-hal seperti login kunci SSH ke akun github atau bitbucket Anda, yang akan berusaha untuk terhubung ke port baru dan gagal.
ccpizza
1
Anda harus membuat direktori awal. Kemudian gunakan sudountuk menginstal. Anda seharusnya tidak membangun dengan hak istimewa yang ditinggikan.
Ini juga berfungsi pada El Capitan di mana SIP membuat mengubah /System/Library/LaunchDaemons/ssh.plist sulit. Tapi, pada El Capitan kunci "NetworkState" sudah usang; Saya sarankan <key>KeepAlive</key><true/>.
RTS - baca tentang Monica Cellio
dengan osx sierra terbaru, versi kerjanya adalah: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu
1

Saya tidak bisa melihat ini didokumentasikan dengan baik di halaman manual, tetapi jika Anda ingin melakukan tidak lebih dari menambahkan pendengar tambahan, Anda dapat menggunakan array pendengar dan memiliki dict tambahan. Ini tidak memerlukan pengeditan / etc / services jika Anda menggunakan port secara langsung (tapi ingat untuk membuka port di firewall Anda!)

    <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
sumber
1
Apa tujuan dari kunci Bonjour?
@ jww Saya pikir itu adalah kesalahan salin-tempel dari saat saya menyatukan ini dari pendengar lain.
Adam Prescott
Saya ingin tahu juga, apa tujuan dari kunci Bonjour?
Drew
1
Tujuan dari kunci Bonjour: Kunci opsional ini dapat digunakan untuk meminta agar layanan terdaftar pada subsistem Bonjour. Seperti yang diceritakan oleh man launchd.plist.
Scott Willeke