ฉันต้องการเปลี่ยนพอร์ตที่sshd
ใช้บนเซิร์ฟเวอร์ Mac ตัวอย่างเช่นสมมุติจากพอร์ต 22 ถึงพอร์ต 32
การแก้ไข/etc/sshd_config
ดูเหมือนจะไม่ทำงาน ไม่มีใครรู้วิธีการเปลี่ยนหรือไม่ ฉันต้องการวิธีที่เข้ากันได้กับ OSX ทุกรุ่น (อย่างน้อยก็มากที่สุด)
ฉันต้องการเปลี่ยนพอร์ตที่sshd
ใช้บนเซิร์ฟเวอร์ Mac ตัวอย่างเช่นสมมุติจากพอร์ต 22 ถึงพอร์ต 32
การแก้ไข/etc/sshd_config
ดูเหมือนจะไม่ทำงาน ไม่มีใครรู้วิธีการเปลี่ยนหรือไม่ ฉันต้องการวิธีที่เข้ากันได้กับ OSX ทุกรุ่น (อย่างน้อยก็มากที่สุด)
คำตอบ:
ทุกคำตอบก่อนหน้านี้ใช้งานได้ (ตามที่ Google แนะนำเช่นกัน) แต่คำเหล่านั้นสกปรกและไม่เหมาะสม
วิธีที่ถูกต้องในการเปลี่ยนพอร์ตการรับฟังสำหรับบริการที่จัดการกับ launchd บน Mac OS X คือการทำให้การเปลี่ยนแปลงคีย์เฉพาะพร้อมใช้งาน
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>
หมายเหตุ:เพื่อให้สามารถแก้ไขไฟล์นี้ใน El Capitan, Sierra และเวอร์ชันในอนาคตได้เช่นกันคุณต้องปิดการใช้งาน SIP (การป้องกันความสมบูรณ์ของระบบ) ดูฉันจะปิดการใช้งานการป้องกันความสมบูรณ์ของระบบ (SIP) [... ]ได้อย่างไร
การแก้ไขข้างต้นจะบังคับ sshd ให้ฟังผ่าน IPV4 เท่านั้น
หลังจากทำการเปลี่ยนแปลงใด ๆssh.plist
แล้วไฟล์จะต้องโหลดใหม่ดังต่อไปนี้:
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
โปรดทราบว่าการใช้launchctl stop ...
และlaunchctl start ...
จะไม่โหลดไฟล์นี้อีกครั้ง
สามารถดู man page ที่มีข้อมูลเพิ่มเติมโดยการพิมพ์man launchd.plist
หรือใช้ลิงค์นี้
หากคุณต้องการ sshd เพื่อฟังพอร์ตเพิ่มเติมคุณสามารถเพิ่มหลายรายการในพจนานุกรม Sockets
ตัวอย่าง:
<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>
/System/Library/LaunchDaemons/ssh.plist
man launchd.plist
อย่างที่บอกว่าโดย
จากสิ่งที่ฉันอ่าน (และมีประสบการณ์) จนถึงมีสามวิธีหลักที่สามารถใช้:
อีกวิธีในการทำซึ่งโดยส่วนตัวแล้วฉันชอบวิธีการเหล่านี้ทั้งหมดเพราะหลีกเลี่ยงการสับสนกับไฟล์ระบบ Mac OS X คือการใช้ socat เพื่อเปลี่ยนเส้นทางพอร์ต 22 ไปยังพอร์ตที่คุณต้องการ
sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz
)cd /usr/local/bin
)sudo tar -xvzf socat-1.7.3.2.tar.gz
cd ./socat-1.7.3.2
sudo ./configure && sudo make && sudo make install
)sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22
)เสร็จแล้วไฟล์ระบบ mac os x ของคุณจะไม่มีการเปลี่ยนแปลง นอกจากนี้วิธีนี้ใช้ได้กับ Snow Leopard เท่านั้น แต่ใช้ได้กับ Mac OS X ทุกรุ่นและในทุกเครื่องที่ socat อาจทำงาน
สิ่งสุดท้ายที่คุณต้องทำถ้าคุณใช้เราเตอร์ / ไฟร์วอลล์คือการรวมคำสั่งเปลี่ยนเส้นทางที่ถูกต้องในเราเตอร์ / ไฟร์วอลล์ของคุณ
นอกจากนี้ยังหลีกเลี่ยงการติดอยู่ในการอภิปรายไม่ว่าจะเป็นวิธีการ ssh.plist วิธีการบริการหรือวิธีการใด ๆ ที่ดีกว่าสง่างามหรือแย่กว่าอีก
คุณยังสามารถเตรียมสคริปต์ที่ทำงานเมื่อเริ่มต้นเพื่อสร้างการเปลี่ยนเส้นทาง socat ได้อย่างง่ายดายแต่ละครั้งที่คุณรีสตาร์ทเครื่อง วางสิ่งนี้ใน/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
ในการโหลด มันจะโหลดโดยอัตโนมัติเมื่อเริ่มต้นระบบใหม่ในอนาคต
นอกจากนี้คุณยังสามารถปรับปรุงการรักษาความปลอดภัยโดย (i) การตั้งค่าไฟร์วอลล์ของคุณเพื่อบล็อกการเชื่อมต่อกับพอร์ต 22 ของคุณจากอินเทอร์เฟซอื่นนอกเหนือจากลูปแบ็ค (127.0.0.1) และ (ii) ทำการเปลี่ยนแปลงที่คล้ายกันในไฟล์ sshd.conf ของคุณ มีฟัง ssh บนลูปแบ็คเท่านั้น
สนุก.
/etc/services
ไฟล์เป็นความคิดที่ไม่ดี - มันจะส่งผลต่อสิ่งต่าง ๆ เช่นการเข้าสู่ระบบคีย์ SSH ไปยังบัญชี github หรือ bitbucket ของคุณซึ่งจะพยายามเชื่อมต่อกับพอร์ตใหม่และล้มเหลว
<key>KeepAlive</key><true/>
ผมขอแนะนำให้
ฉันไม่เห็นเอกสารนี้ที่ใดก็ได้อย่างเหมาะสมในหน้าคน แต่ถ้าคุณไม่ต้องการทำอะไรมากไปกว่าการเพิ่มผู้ฟังคนพิเศษคุณสามารถใช้อาร์เรย์ของผู้ฟังและมีพจน์พิเศษ สิ่งนี้ไม่ต้องการการแก้ไข / etc / services หากคุณใช้พอร์ตโดยตรง (แต่อย่าลืมเปิดพอร์ตบนไฟร์วอลล์ของคุณ!)
<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>
man launchd.plist
อย่างที่บอกว่าโดย
/usr/libexec/sshd-keygen-wrapper
(แสดงใน plists ด้านล่าง) สามารถเริ่ม SSH ที่แตกต่างจากที่ระบุไว้ใน plist เอง/usr/sbin/sshd
หากคุณแมวมันจะเริ่มต้น