วิธีการเปลี่ยนหมายเลขพอร์ตที่แชร์บนหน้าจอเริ่มต้น / VNC บน Mac OS X


10

มีวิธีการเปลี่ยนจากค่าเริ่มต้น5900เป็นพอร์ตอื่นหรือไม่?


อย่างน้อยก็ปิดการเชื่อมต่อจากทุกอย่างยกเว้น localhost ถึง 5900; การรักษาความปลอดภัย OS X ด้วย ipfw - CS Labs Wiki

คำตอบ:


16

คุณสามารถสลับพอร์ตเริ่มต้นสำหรับเซิร์ฟเวอร์ VNC ของ Apple ใน Mac OS 10.7 Lion และ 10.8 Mountain Lion ในการเปลี่ยนพอร์ตคุณต้องแก้ไขไฟล์ plist ของเซิร์ฟเวอร์/System/Library/LaunchDaemons/com.apple.screensharing.plist(ไฟล์นี้ไม่มีอยู่ในระบบก่อนหน้า 10.7 Lion)

การแก้ไขไฟล์ต้องใช้สิทธิ์รูท (sudo) ในเทอร์มินัลหากคุณคุ้นเคยกับ vi หรือvimคุณสามารถพิมพ์:

sudo vim /System/Library/LaunchDaemons/com.apple.screensharing.plist

หรือถ้าคุณไม่คุณควรใช้นาโน :

sudo nano /System/Library/LaunchDaemons/com.apple.screensharing.plist

ตอนนี้สิ่งที่คุณต้องทำคือเปลี่ยนบรรทัด 34 (หมายเลขที่อ่าน<string>vnc-server</string>) เป็น<string>nnnn</string>ที่ ๆ nnnn คือหมายเลขพอร์ตที่คุณต้องการใช้ ฉันรู้ว่ามันแปลกที่การเปลี่ยนชื่อเช่น "vnc-server" เป็นตัวเลข แต่นั่นคือวิธีที่คุณต้องทำ ฉันได้รวมตัวอย่างด้านล่างในกรณีที่มีอะไรไม่ชัดเจน

ในการเปลี่ยนพอร์ตเริ่มต้นเป็น 54321 คุณจะต้องแก้ไขไฟล์ plist ให้เป็นดังนี้:

...
<key>Sockets</key>
  <dict>
      <key>Listener</key>
      <dict>
          <key>Bonjour</key>
          <string>rfb</string>
          <key>SockServiceName</key>
          <string>54321</string>            <!-- Change this line! -->
      </dict>
  </dict>
  <key>UserName</key>
  <string>root</string>
  <key>SHAuthorizationRight</key>
  <string>system.preferences</string>
</dict>
</plist>

หลังจากบันทึกไฟล์เพื่อให้การเปลี่ยนแปลงมีผลให้ปิดการแชร์หน้าจอแล้วเปิดใหม่อีกครั้งในบานหน้าต่างการตั้งค่าการแชร์หรืออีกวิธีหนึ่งคือยกเลิกการโหลดและโหลดบริการอีกครั้งโดยใช้คำสั่งเหล่านี้:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist

หากคุณยังอยู่ใกล้ - เมื่อคุณทำสิ่งนี้แล้วมีวิธีเปรียบเทียบได้หรือไม่ที่จะใช้แอพแชร์หน้าจอ Mac ในตัวเพื่อเชื่อมต่อกับพอร์ตนั้นหรือคุณติดขัดโดยใช้แอพ vnc ของบุคคลที่สาม ท่าเรือ?
Jim Miller

2
คำตอบข้างต้น: ใน "เชื่อมต่อกับเซิร์ฟเวอร์ ... " ระบุ vnc: //yourserver.com: 54321 (ตามหมายเลขพอร์ตตัวอย่างก่อนหน้านี้)
Jim Miller

หากใช้งานได้ (ฉันไม่สามารถตรวจสอบได้จนถึงคืนนี้) คุณควรได้รับการโหวตมากขึ้น
PaulSkinner

1
เพื่อยืนยันว่าใช่คุณจะต้องทำสิ่งนี้หลังจากการอัปเดตระบบปฏิบัติการแต่ละครั้ง (รวมถึงการอัปเดตที่เพิ่มขึ้น)
PaulSkinner

1
ในการเพิ่มบันทึกเพิ่มเติมนี้คุณลักษณะ 'rootless' ใหม่ของ OS X 10.11 El Capitan หมายถึงไม่สามารถบันทึกไฟล์นี้โดยไม่ต้องปิดการใช้งานคุณสมบัติ rootless ซึ่งไม่แนะนำ ใครรู้วิธีแก้ปัญหาโดยไม่ต้องปิดการใช้งานรูต?
PaulSkinner

5

ฉันสามารถยืนยันหลังจากค้นหาหัวข้อนี้ผ่านทาง Google ว่าการแก้ไข/etc/servicesสำหรับพอร์ต "rfb" จะเปลี่ยนพอร์ตการฟังของเซิร์ฟเวอร์ VNC ที่รวมอยู่

ฉันแก้ไขไฟล์และรีบูตเครื่อง (โดยปกติฉันจะลองรีสตาร์ทบริการหรือยกเลิกการโหลด launchdeamon แต่ฉันมีปัญหาอื่น ๆ เช่นกันและไม่ต้องกังวล) iTeleport บน iPad ของฉันล้มเหลวในการเชื่อมต่อกับ 5900 และประสบความสำเร็จในพอร์ตที่ไม่มีสิทธิสูงที่ฉันเลือก


คำตอบนี้อาจเป็นทางออกสำหรับใช้กับ El Capitan 10.11
PaulSkinner

เพื่อยืนยันตอนนี้น่าจะเป็นทางออกที่ดีที่สุดสำหรับ El Capitan 10.11 โดยไม่ต้องปิดรูท
PaulSkinner

สิ่งนี้ใช้ได้สำหรับการแชร์ไฟล์ (smb) เช่นกัน! ฉันเปลี่ยนพอร์ตสำหรับ "Microsoft-DS"
Wowfunhappy

@ PaulSkinner ไม่รูทปกป้องทุกอย่างใน / etc ใช่ไหม? (ฉันปิดการใช้งานดังนั้นฉันจะไม่รู้)
Wowfunhappy

@ Wowfunhappy น่าอัศจรรย์ไม่
PaulSkinner

3

นี้ได้รับการกล่าวถึงในเว็บบอร์ดต่างๆที่apple.comและmacosxhints.com คำตอบสั้น ๆ คือ "คุณไม่สามารถเปลี่ยนได้"

คำตอบอีกต่อไปจะแนะนำวิธีรอบ ๆ - ความเป็นไปได้สามประการ

  • ใช้ซอฟต์แวร์เซิร์ฟเวอร์ VNC สำรอง
  • ใช้ ssh tunnel เพื่อเปลี่ยนเส้นทางปริมาณการใช้งานจากพอร์ตที่คุณกำหนดเองเป็น 5900
  • กำหนดค่าการแมปพอร์ตในเราเตอร์ของคุณเพื่อรับทราฟฟิกขาเข้าบนพอร์ตอื่นเพื่อไปยังพอร์ต 5900 บน mac ของคุณ

เพื่อประโยชน์ของความสมบูรณ์: บางคนแนะนำว่าการเปลี่ยนพอร์ตใน/etc/Servicesอาจเป็นการหลอกลวง ฉันลองแล้ว (ฉันรีบูตเครื่อง Mac หลังจากเปลี่ยน) จะไม่มีประโยชน์ และให้ความคิดมากกว่านี้อาจเป็นความคิดที่ดีที่จะยุ่งกับไฟล์นั้นเนื่องจากแอปพลิเคชันอื่นอาจใช้เพื่อรับหมายเลขพอร์ตที่รู้จักกันดีหากพวกเขาต้องการเชื่อมต่อกับบุคคลที่สามโดยใช้โปรโตคอลเฉพาะ (เช่นเดียวกับ: เปลี่ยนพอร์ต SSH ในแฟ้มที่อาจดูเหมือนจะทำงาน แต่เป็นความคิดที่ไม่ดี .)
Arjan

1
จดบันทึกคำตอบโดย Greg Canty - สามารถเปลี่ยนแปลงได้ใน OS X ที่เผยแพร่หลัง Snow Leopard คำตอบนี้ถูกเขียนขึ้นก่อนที่ OS X Lion จะวางจำหน่าย
Doug Harris

1

จากข้อมูลที่ Greg จัดเตรียมไว้ในเธรดนี้ฉันได้เขียนสคริปต์ทุบตีที่จะทำให้กระบวนการเปลี่ยนพอร์ตการฟัง VNC ของระบบของคุณเป็นแบบอัตโนมัติ ทำงานได้ดีในการทดสอบของฉัน แจ้งให้เราทราบหากใครมีปัญหาใด ๆ กับมัน

#!/bin/sh

#Created by Will D. on 04/10/2015
#If you find it useful (or have suggestions, feedback, etc.), shoot me an email at throwapenny@me.com.
#Requires Mac OS 10.7.x or later (tested up to and including 10.10.3)
#02/02/2016 - Updated Script to alert for SIP status

#Setting Static Variables
sourcepath="/System/Library/LaunchDaemons/"
filename="com.apple.screensharing.plist"
port=`less $sourcepath$filename | awk 'f{print $1;f=0} /SockServiceName/ {f=1}' | awk -F "<|>" '{print $3}'`
os_version=`sw_vers -productVersion`
os_version_aug=`sw_vers -productVersion | awk -F "." '{print $1$2}'`
sip_status=`csrutil status | awk '{print $5}'`
#Colors
nc='\033[0m'
light_red='\033[1;31m' #Light Red
yellow='\033[1;33m' #Yellow

clear

#Check the script is being run by root
if [ "$EUID" -ne 0 ];then
    printf "${light_red}This Script Must Run As Root${nc}\n"
    exit 0
fi

clear
printf ${yellow};echo "---------------------------------------------------------------"
echo "---                                                         ---"
echo "--- This Script Will Change Your Systems VNC Listening Port ---"
echo "---             Hit Ctrl + c to exit at anytime             ---"
echo "---                                                         ---"
echo "---------------------------------------------------------------";printf "${nc}\n"

#Check System Version
sleep 1
if [ "${os_version_aug}" -lt "107" ]; then
echo ""
echo "System OS Must Be Greater Than 10.7.x.  Aborting Script."
exit 0
else
echo ""
echo "System OS Version is" $os_version
echo "OS Requirement Met √"
echo "--------"
fi

if [ "${os_version_aug}" == "1011" ]; then
    if [ "${sip_status}" == "enabled." ]; then
        echo ""
        printf "${light_red}••• System Integrity Protection is Enabled •••${nc}\n"
        echo ""
        echo "This script modifies /System/Library/LaunchDaemons/com.apple.screensharing.plist"
        echo "Please Disable System Integrity Protection Before Running"
        echo ""
        exit 0
    fi
fi

#Give Feedback on Current Port
sleep 1
if [ "${port}" == "vnc-server" ]; then
echo ""
echo "The System's VNC Port is Currently"
echo "Set to the System Default Port of 5900."
echo "--------"
elif [ "${port}" != "vnc-server" ]; then
echo ""
echo "The System's VNC Port is Currently"
echo "Set to a Non-default Port of" $port"."
echo "--------"
fi

#Updating Port
echo ""
printf "What Port Would You Like VNC to Listen On? "
read newport
echo ""
echo "The Following Action Requires an Admin Password."
echo "Note: Your Password Will Be Visible When You Type It"
echo ""
printf "Admin Password? "
read admin_pass
sleep 1
echo ""
echo "Created" $filename".bak."
sleep 1
echo ""
echo "Updating VNC Port to" $newport"..."
echo $admin_pass | sudo -S sed -i.bak -e "s|$port|$newport|g" $sourcepath$filename
sleep 1
echo "Done"
echo ""
sleep 1

#Restarting screensharing process
echo "Restarting Screen Sharing Service..."
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist
echo "Done"
sleep 1
echo ""
echo "Your System's VNC Port is Now Set to" $newport"."
echo ""
echo "Update Complete.  All Done."

if [ "${os_version_aug}" == "1011" ]; then
    echo ""
    echo "Since you're running El Capitan"
    echo "be sure to re-enable System Integrity Protection"
    exit 0
fi

exit 0

เมื่อฉันพยายามเข้าถึงลิงก์ - ฉันได้รับข้อผิดพลาดเซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่ามันเป็น getsome.homeftp.net; ใบรับรองความปลอดภัยไม่น่าเชื่อถือจากระบบปฏิบัติการของคอมพิวเตอร์ของคุณ สิ่งนี้อาจเกิดจากการกำหนดค่าผิดพลาดหรือผู้โจมตีขัดขวางการเชื่อมต่อของคุณ
Prasanna

ขออภัยเกี่ยวกับ Mureinik นั้น รหัสโพสต์แทนลิงค์
จะ

0

การเปลี่ยนพอร์ตเริ่มต้นและ / หรือมีผลผูกพันอยู่ได้โดยไม่ต้องปิดการใช้งานระบบป้องกันความสมบูรณ์ของคุณจะต้องสร้าง LaunchDaemon /Libraryใหม่

น่าเสียดายที่ตัวแทนการแชร์หน้าจอจะทำงานไม่ถูกต้องเมื่อกำหนดป้ายกำกับอื่น นั่นหมายความว่า daemon จะต้อง "แชโดว์" ต้นฉบับโดยใช้ชื่อเดียวกัน ที่ทำให้มันเป็นปัญหาของตัวเองเพราะในการรีบูตระบบจะโหลดเดิมและไม่สนใจรุ่นที่ปรับเปลี่ยนใน/System/Library

วิธีแก้ไขคือปิดการใช้งาน LaunchDaemon และใช้ "launcher" daemon ที่บังคับให้โหลด LaunchDaemon ที่แก้ไขแล้ว อย่างไรก็ตามการดูแลจะต้องนำไปใช้งานร่วมกันหน้าจอยังคงเปิดใช้งานผ่านการตั้งค่า orelse มันจะ endup ในสังเกตเฉพาะโหมด

เป็นขั้นเป็นตอน

  1. เปิดใช้งานการแชร์หน้าจอในการตั้งค่าระบบ
  2. ปฏิบัติ

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. ปฏิบัติ

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. ใน/Library/LaunchDaemons/com.apple.screensharing.plistแก้ไขส่วนซ็อกเก็ตเพื่อดูวิธีที่คุณต้องการ ตัวอย่างเช่นการฟังlocalhost:5901:

    <key>Sockets</key>
      <dict>
        <key>Listener</key>
        <dict>
          <key>SockNodeName</key>
          <string>localhost</string>
          <key>SockServiceName</key>
          <string>5901</string>
        </dict>
    </dict>
    
  5. สร้าง/Library/LaunchDaemons/com.apple.screensharing.launcher.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.apple.screensharing.launcher</string>
      <key>LaunchOnlyOnce</key>
      <true/>
      <key>RunAtLoad</key>
      <true/>
      <key>KeepAlive</key>
      <false/>
      <key>ProgramArguments</key>
      <array>
        <string>/bin/launchctl</string>
        <string>load</string>
        <string>-F</string>
        <string>/Library/LaunchDaemons/com.apple.screensharing.plist</string>
      </array>
    </dict>
    </plist>
    
  6. ปฏิบัติ

    sudo launchctl load -w /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
    

หลังจากนี้สิทธิ์การแชร์หน้าจอจะได้รับการจัดสรรอย่างถูกต้อง daemon เริ่มต้นจะไม่โหลดโดยอัตโนมัติและตัวเรียกใช้ของเราจะบังคับให้เริ่ม daemon ที่กำหนดเองของเรา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.