Làm cách nào để thay đổi cổng sshd trên Mac OS X?


53

Tôi muốn thay đổi cổng nào sshdsử dụng trên máy chủ Mac. Ví dụ: giả sử từ cổng 22 đến cổng 32.

Chỉnh sửa /etc/sshd_configdường như không hoạt động. Có ai biết làm thế nào để thay đổi nó? Tôi thích một phương thức tương thích với tất cả các phiên bản OSX (hoặc ít nhất là có thể).


Cũng lưu ý rằng /usr/libexec/sshd-keygen-wrapper(được hiển thị trong các bảng dưới đây) có thể bắt đầu một SSH khác với chỉ định trong chính bảng. Nếu bạn mèo nó, nó luôn luôn bắt đầu /usr/sbin/sshd.

Câu trả lời:


61

Mọi câu trả lời trước đều hoạt động (như google cũng đề xuất), nhưng chúng bẩn và không phù hợp .

Cách đúng để thay đổi cổng nghe cho dịch vụ xử lý launchd trên Mac OS X là thực hiện thay đổi các phím chuyên dụng có sẵn trong ssh.plist

Vì vậy, giải pháp đơn giản là sử dụng số cổng thay vì tên dịch vụ.

Một đoạn trích từ chỉnh sửa của tôi /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>

Lưu ý: để có thể chỉnh sửa tệp này trên El Capitan, Sierra và có thể cả các phiên bản trong tương lai, bạn cần phải tắt SIP (Bảo vệ toàn vẹn hệ thống). Xem Làm cách nào để tắt Bảo vệ toàn vẹn hệ thống (SIP) [...] .

Chỉnh sửa ở trên cũng sẽ buộc sshd chỉ nghe qua IPV4.

Sau khi thực hiện bất kỳ thay đổi nào ssh.plist, tệp phải được tải lại như sau:

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

Lưu ý rằng sử dụng launchctl stop ...launchctl start ...sẽ KHÔNG tải lại tệp này.

Trang người đàn ông có nhiều thông tin hơn có thể được tìm thấy bằng cách gõ man launchd.plisthoặc sử dụng liên kết này .


3
@Yar launchd.plist là tên của hướng dẫn. Thay đổi nằm trong tệp ssh.plist trong / System / Library / LaunchDaemons
Martijn Pieters

1
Tôi lưu ý rằng bạn cần khởi động lại máy hoặc khởi động lại dịch vụ ssh bằng launchctl.
Daniel Staple

5
Grr ... mọi nâng cấp của OS X (Yosemite trong trường hợp này) đều loại bỏ thay đổi này, yêu cầu tôi phải nhớ những gì tôi đã làm lần trước để sửa nó và nơi tôi tìm thấy thông tin này. Cảm ơn đã sửa chữa!
Michael

2
@Hassan bạn phải bắt đầu hai trường hợp ssh .. tức là thêm một Trình lắng nghe khác với tên và giá trị
SockServiceName khác

5
Chú ý rằng trên phiên bản El Capitan (và có lẽ trong các phiên bản tương lai cũng) bạn cần phải vô hiệu hóa SIP (Hệ thống Liêm Protection) trước khi bạn có thể chỉnh sửa các tập tin, xem: apple.stackexchange.com/a/208481
jcfrei

17

Nếu bạn muốn sshd nghe trên một cổng bổ sung, bạn có thể thêm nhiều mục vào từ điển Sockets.

Thí dụ:

<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
Để rõ ràng, @Raim đang đề cập đến:/System/Library/LaunchDaemons/ssh.plist
Mike Causer

Mục đích của khóa Bonjour là gì?

Tôi cũng muốn biết, mục đích của khóa Bonjour là gì?
vẽ

20022 là cái quái gì?
Jamie Hutber

1
Mục đích của khóa Bonjour: Khóa tùy chọn này có thể được sử dụng để yêu cầu dịch vụ được đăng ký với hệ thống con Bonjour. Như đã nói man launchd.plist.
Scott Willeke

6

Từ những gì tôi đọc (và có kinh nghiệm) cho đến nay, có ba phương pháp chính có thể được sử dụng:

  1. thay đổi cài đặt trong tệp ssh.plist;
  2. thay đổi cài đặt trong tệp / etc / services;
  3. thay đổi cài đặt trong tệp /etc/sshd.conf.

Một cách khác để làm điều đó, mà cá nhân tôi từ trước đến nay thích hơn tất cả và mỗi phương pháp này, vì nó tránh gây rối với các tệp hệ thống Mac OS X là sử dụng socat để chuyển hướng cổng 22 sang bất kỳ cổng nào bạn muốn.

  1. Tải xuống socat: http://www.dest-unreach.org/socat/doad/socat-1.7.3.2.tar.gz
  2. Di chuyển tệp tar.gz vào thư mục / usr / local / của bạn ( sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. Chuyển đến thư mục / usr / local / bin ( cd /usr/local/bin)
  4. Giải nén: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Di chuyển đến thư mục tập tin không nén: cd ./socat-1.7.3.2
  6. Chạy cấu hình thông thường, tạo và thực hiện cài đặt để cài đặt socat ( sudo ./configure && sudo make && sudo make install)
  7. Chuyển hướng cổng 22 (ssh mặc định) sang bất kỳ cổng nào bạn muốn (trong ví dụ sau, 2222) bằng cách sử dụng tùy chọn chính xác bằng cách gửi một cuộc gọi socat ( sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

Bạn đã hoàn tất và các tệp hệ thống mac os x của bạn được giữ nguyên. Ngoài ra, phương pháp này không chỉ hoạt động trên Snow Leopard, mà trên tất cả các phiên bản Mac OS X và trên bất kỳ máy nào mà socat có thể chạy.

Điều cuối cùng bạn cần làm nếu bạn sử dụng bộ định tuyến / tường lửa là bao gồm các lệnh chuyển hướng chính xác trong bộ định tuyến / tường lửa của bạn.

Ngoài ra, nó cũng tránh bị mắc kẹt trong cuộc tranh luận liệu phương pháp ssh.plist, phương thức dịch vụ hay phương thức nào tốt hơn, thanh lịch hơn hay tệ hơn phương pháp khác.

Bạn cũng có thể dễ dàng chuẩn bị một tập lệnh chạy khi khởi động để xây dựng lại chuyển hướng xã hội mỗi khi bạn khởi động lại máy. Đặt cái này vào /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>

Sử dụng sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistđể tải nó. Nó sẽ tự động tải vào các lần khởi động lại trong tương lai.

Ngoài ra, bạn cũng có thể cải thiện bảo mật bằng cách (i) đặt tường lửa của mình chặn mọi kết nối tới cổng 22 từ bất kỳ giao diện nào khác ngoài loopback (127.0.0.1) và (ii) thực hiện thay đổi tương tự trong tệp sshd.conf của bạn thành có ssh nghe trên loopback thôi.

Thưởng thức.


2
Chỉnh sửa /etc/servicestệp là một ý tưởng tồi - nó sẽ ảnh hưởng đến những thứ như đăng nhập khóa SSH vào tài khoản github hoặc bitbucket của bạn, sẽ tìm cách kết nối với cổng mới và không thành công.
ccpizza

1
Bạn nên xây dựng trong một thư mục đầu. Sau đó sử dụng sudođể cài đặt. Bạn không nên xây dựng với các đặc quyền nâng cao.

Điều này cũng hoạt động trên El Capitan, nơi SIP khiến việc thay đổi / System / L Library / LaDDemem / ssh.plist trở nên khó khăn. Nhưng, trên El Capitan, khóa "NetworkState" không được dùng nữa; Tôi đề nghị <key>KeepAlive</key><true/>.
RTS - đọc về Monica Cellio

với osx sierra mới nhất, phiên bản hoạt động là: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu

1

Tôi không thể thấy tài liệu này ở bất cứ đâu trong một trang nam, nhưng nếu bạn không muốn làm gì hơn là thêm một người nghe, bạn có thể sử dụng một loạt các trình nghe và có thêm một lệnh. Điều này không yêu cầu chỉnh sửa / etc / services nếu bạn sử dụng cổng trực tiếp (nhưng hãy nhớ mở cổng trên tường lửa của bạ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
Mục đích của khóa Bonjour là gì?

@jww Tôi nghĩ đó là lỗi sao chép từ khi tôi ghép cái này với những người nghe khác.
Adam Prescott

Tôi cũng muốn biết, mục đích của khóa Bonjour là gì?
vẽ

1
Mục đích của khóa Bonjour: Khóa tùy chọn này có thể được sử dụng để yêu cầu dịch vụ được đăng ký với hệ thống con Bonjour. Như đã nói man launchd.plist.
Scott Willeke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.