सवाल मैक ओएस एक्स पर एसएसडीडी पोर्ट कैसे बदलें?


मैं कौन सा बंदरगाह बदलना चाहता हूं sshd मैक सर्वर पर उपयोग करता है। उदाहरण के लिए, पोर्ट 22 से पोर्ट 32 तक कहें।

संपादन /etc/sshd_config काम नहीं लग रहा है। क्या कोई जानता है कि इसे कैसे बदला जाए? मैं एक ऐसी विधि पसंद करूंगा जो सभी ओएसएक्स संस्करणों (या जितना संभव हो सके, कम से कम) के साथ संगत है।


52
2018-06-03 14:19


मूल


यह भी ध्यान दें /usr/libexec/sshd-keygen-wrapper (नीचे दी गई सूची में दिखाया गया है) प्लिस्ट में निर्दिष्ट से अलग एसएसएच शुरू कर सकते हैं। यदि आप इसे बिल्ली देते हैं, तो यह हमेशा शुरू होता है /usr/sbin/sshd। - jww


जवाब:


हर पिछला जवाब काम कर रहा है (जैसा कि Google भी सुझाव देता है), लेकिन वे हैं गंदे और सुरुचिपूर्ण

मैक ओएस एक्स पर लॉन्च की गई हैंडल सेवा के लिए श्रवण बंदरगाह को बदलने का सही तरीका है समर्पित कुंजी को उपलब्ध करना ssh.plist

इसलिए समाधान सेवा नाम के बजाय पोर्ट नंबर का उपयोग करना उतना आसान है।

मेरे संपादित से एक अंश /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>

ध्यान दें: एल कैपिटन, सिएरा और शायद भविष्य के संस्करणों पर भी इस फ़ाइल को संपादित करने में सक्षम होने के लिए, आपको एसआईपी (सिस्टम इंटेग्रिटी प्रोटेक्शन) को अक्षम करने की आवश्यकता है। देख मैं सिस्टम इंटीग्रटी प्रोटेक्शन (एसआईपी) कैसे अक्षम करूं [...]

उपर्युक्त संपादन एसएसडीडी को केवल आईपीवी 4 पर सुनने के लिए मजबूर करेगा।

कोई बदलाव करने के बाद ssh.plistफ़ाइल को निम्नानुसार पुनः लोड किया जाना चाहिए:

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

ध्यान दें कि उपयोग कर रहा है launchctl stop ... तथा launchctl start ... इस फ़ाइल को पुनः लोड नहीं करेगा।

अधिक जानकारी वाला मैन पेज टाइप करके पाया जा सकता है man launchd.plist या उपयोग कर रहे हैं यह लिंक


61
2017-09-22 09:52



@Yar launchd.plist मैनुअल का नाम है। परिवर्तन ssh.plist फ़ाइल में / सिस्टम / लाइब्रेरी / लॉन्चडेमन्स में है - Martijn Pieters
मुझे लगता है कि आपको या तो मशीन को पुनरारंभ करने की आवश्यकता है, या लॉन्चक्टल के साथ एसएसएच सेवा को पुनरारंभ करना होगा। - Danny Staple
Grr ... ओएस एक्स के प्रत्येक अपग्रेड (इस मामले में योसामेट) इस परिवर्तन को त्याग देता है, मुझे यह याद रखने की आवश्यकता है कि मैंने इसे ठीक करने के लिए आखिरी बार क्या किया था, और जहां मुझे यह जानकारी मिली। फिक्स के लिए धन्यवाद! - Michael
@ हसन आपको दो एसएसएच इंस्टेंस शुरू करना होगा .. यानी अलग सॉकर सेवा नाम और मूल्य के साथ एक और श्रोता जोड़ें - drAlberT
ध्यान दें कि एल कैपिटन संस्करण (और शायद भविष्य के संस्करणों में भी) पर आपको फ़ाइल संपादित करने से पहले एसआईपी (सिस्टम इंटेग्रिटी प्रोटेक्शन) को अक्षम करने की आवश्यकता है, देखें: apple.stackexchange.com/a/208481 - jcfrei


यदि आप अतिरिक्त पोर्ट पर सुनने के लिए sshd चाहते हैं, तो आप सॉकेट्स शब्दकोश में कई प्रविष्टियां जोड़ सकते हैं।

उदाहरण:

<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
2017-09-28 16:41



स्पष्टता के लिए, @ रैम का जिक्र है: /System/Library/LaunchDaemons/ssh.plist - Mike Causer
बोनजोर कुंजी का उद्देश्य क्या है? - jww
मुझे भी जानना अच्छा लगेगा, बोनजोर कुंजी का उद्देश्य क्या है? - Drew
20022 क्या है? - Jamie Hutber


जो मैंने पढ़ा है (और अनुभवी) अब तक, तीन मुख्य विधियां हैं जिनका उपयोग किया जा सकता है:

  1. ssh.plist फ़ाइल में सेटिंग बदलें;
  2. / etc / सेवाओं फ़ाइल में सेटिंग बदलें;
  3. /etc/sshd.conf फ़ाइल में सेटिंग बदलें।

ऐसा करने का एक और तरीका, जिसे मैं व्यक्तिगत रूप से अब तक और इन तरीकों में से प्रत्येक को पसंद करता हूं, क्योंकि यह मैक ओएस एक्स सिस्टम फाइलों के साथ गड़बड़ से बचाता है, जो भी पोर्ट आप चाहते हैं पोर्ट 22 को रीडायरेक्ट करने के लिए सोशल का उपयोग कर रहा है।

  1. समाज डाउनलोड करें: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Tar.gz फ़ाइल को अपने / usr / local / निर्देशिका में ले जाएं (sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. अपने / usr / स्थानीय / बिन निर्देशिका पर जाएं (cd /usr/local/bin)
  4. को विस्तारित: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. असंपीड़ित फ़ाइल निर्देशिका में ले जाएं: cd ./socat-1.7.3.2
  6. सामान्य कॉन्फ़िगरेशन चलाएं, सोसा इंस्टॉल करने के लिए इंस्टॉल करें और इंस्टॉल करें (sudo ./configure && sudo make && sudo make install)
  7. एक सामाजिक कॉल भेजकर सही विकल्प का उपयोग कर अपने इच्छित पोर्ट (निम्नलिखित पूर्व में, 2222) में बंदरगाह 22 (डिफ़ॉल्ट एसएसएच) को पुनर्निर्देशित करें (sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

आप कर चुके हैं और आपके मैक ओएस एक्स सिस्टम फाइलों को अपरिवर्तित छोड़ दिया गया है। इसके अलावा, यह विधि न केवल हिम तेंदुए पर काम करती है, बल्कि मैक ओएस एक्स के सभी संस्करणों पर और किसी भी मशीन पर जिस पर सोसा चल सकता है।

यदि आप राउटर / फ़ायरवॉल का उपयोग करते हैं तो आपको अंतिम राउटर / फ़ायरवॉल में सही रीडायरेक्ट कमांड शामिल करना होगा।

इसके अलावा, यह बहस में फंसने से बचाता है कि क्या ssh.plist विधि, सेवा विधि या जो भी तरीका बेहतर है, दूसरे से अधिक सुरुचिपूर्ण या बदतर है।

आप आसानी से एक स्क्रिप्ट तैयार कर सकते हैं जो आपके मशीन को पुनरारंभ करने के लिए सोशल रीडायरेक्शन के पुनर्निर्माण के लिए शुरू होता है। इसे अंदर रखें /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.plist इसे लोड करने के लिए। यह भविष्य में रीबूट पर स्वचालित रूप से लोड हो जाएगा।

इसके अतिरिक्त, आप लूपबैक (127.0.0.1) की तुलना में किसी अन्य इंटरफ़ेस से अपने पोर्ट 22 पर किसी भी कनेक्शन को अवरुद्ध करने के लिए अपनी फ़ायरवॉल सेट करके (i) सुरक्षा को भी सुधार सकते हैं और (ii) अपनी sshd.conf फ़ाइल में समान परिवर्तन करें एसएसएच केवल लूपबैक पर सुनें।

का आनंद लें।


6
2017-12-22 10:46



संपादन /etc/services फ़ाइल एक बुरा विचार है - यह आपके जीथब या बिटबकेट खातों में एसएसएच कुंजी लॉगिन जैसी चीजों को प्रभावित करेगा, जो नए बंदरगाह से कनेक्ट होने और असफल होने की तलाश करेंगे। - ccpizza
आपको स्क्रैच निर्देशिका में बनाना चाहिए। फिर उपयोग करें sudo स्थापित करने के लिए। आपको ऊंचे विशेषाधिकारों के साथ निर्माण नहीं करना चाहिए। - jww
यह एल कैपिटन पर भी काम करता है जहां एसआईपी बदलता / सिस्टम / लाइब्रेरी / लांचडेमन्स / एसएस.प्लिस्ट मुश्किल बनाता है। लेकिन, एल कैपिटन पर "नेटवर्कस्टेट" कुंजी को बहिष्कृत किया गया है; मैं सुझाव देता हूँ <key>KeepAlive</key><true/>। - Robert Tupelo-Schneck
नवीनतम ओएसएक्स सिएरा के साथ, कामकाजी संस्करण है: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd - Shanmu


मैं इसे किसी मैन पेज में कहीं भी सही तरीके से प्रलेखित नहीं देख सका, लेकिन यदि आप एक अतिरिक्त श्रोता जोड़ने से ज्यादा कुछ नहीं करना चाहते हैं, तो आप श्रोताओं की एक सरणी का उपयोग कर सकते हैं और एक अतिरिक्त निर्देश प्राप्त कर सकते हैं। यदि आप सीधे पोर्ट का उपयोग करते हैं तो संपादन / etc / सेवाओं की आवश्यकता नहीं है (लेकिन अपने फ़ायरवॉल पर बंदरगाह खोलना याद रखें!)

    <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



बोनजोर कुंजी का उद्देश्य क्या है? - jww
@jww मुझे लगता है कि जब मैं इसे अन्य श्रोताओं से एक साथ जोड़ रहा था तब से एक कॉपी-पेस्ट त्रुटि है। - Adam Prescott
मुझे भी जानना अच्छा लगेगा, बोनजोर कुंजी का उद्देश्य क्या है? - Drew