it-swarm-vi.tech

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

Tôi muốn thay đổi cổng nào sshd sử 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_config dườ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ể).

54
Alexander Artemenko

Mọi câu trả lời trước đều hoạt động (như google cũng đề xuất), nhưng chúng là 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ừ bản 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ể là 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 để vô hiệu hóa 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 đối với 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 tin 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 nhập man launchd.plist hoặc sử dụng liên kết này .

62
drAlberT

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

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 của bạn (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 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 thành 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.

6
Cedric

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