Bagaimana cara mengubah nomor port berbagi / VNC layar default pada Mac OS X?

Jawaban:

16

Anda sebenarnya dapat mengganti port default untuk server VNC Apple pada Mac OS 10.7 Lion dan 10.8 Mountain Lion. Untuk mengubah port, Anda perlu mengedit file plist server /System/Library/LaunchDaemons/com.apple.screensharing.plist(file ini tidak ada di sistem sebelum 10.7 Lion).

Mengedit file memerlukan hak akses root (sudo). Di terminal, jika Anda terbiasa dengan vi atau vim , Anda dapat mengetik:

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

atau jika tidak, Anda sebaiknya menggunakan nano :

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

Sekarang, yang harus Anda lakukan adalah mengubah baris 34 (yang berbunyi <string>vnc-server</string>) ke <string>nnnn</string>tempat nnnn adalah nomor port yang ingin Anda gunakan. Saya tahu rasanya aneh mengubah nama seperti "vnc-server" ke nomor, tetapi itulah cara Anda harus melakukannya. Saya telah memasukkan contoh di bawah ini jika ada sesuatu yang tidak jelas.

Untuk mengubah port default ke 54321, Anda akan mengedit file plist agar terlihat seperti ini:

...
<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>

Setelah menyimpan file, untuk membuat perubahan berlaku, matikan Berbagi Layar dan nyalakan lagi di panel preferensi Berbagi, atau alternatifkan bongkar dan muat ulang layanan menggunakan perintah ini:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist
Greg Canty
sumber
Jika Anda masih ada - setelah Anda melakukan ini, apakah ada cara yang sebanding untuk mendapatkan aplikasi berbagi layar Mac bawaan untuk menyambungkan ke port itu, atau apakah Anda terjebak menggunakan aplikasi vnc pihak ketiga yang memungkinkan Anda menentukan Pelabuhan?
Jim Miller
2
Jawaban di atas: Di "Sambungkan ke server ...", tentukan vnc: //yourserver.com: 54321 (mengikuti contoh sebelumnya nomor port ulang)
Jim Miller
Jika ini berhasil (saya tidak bisa memeriksa sampai malam ini) Anda layak mendapatkan lebih banyak lagi upvotes.
PaulSkinner
1
Untuk mengonfirmasi, ya, Anda harus melakukan ini setelah setiap pembaruan OS (termasuk pembaruan tambahan).
PaulSkinner
1
Untuk menambahkan satu lagi catatan untuk ini, fitur 'tak menentu' baru dari OS X 10.11 El Capitan berarti tidak mungkin lagi untuk menyimpan file khusus ini tanpa menonaktifkan fitur tidak menentu, yang tidak dianjurkan. Adakah yang tahu solusinya tanpa menonaktifkan rootless?
PaulSkinner
5

Saya dapat mengonfirmasi setelah menemukan utas ini melalui Google bahwa pengeditan /etc/servicesuntuk port "rfb" akan mengubah port mendengarkan server VNC yang disertakan.

Saya mengedit file dan reboot (biasanya saya akan mencoba me-restart layanan atau membongkar launchdeamon tetapi saya mengalami beberapa masalah lain juga dan tidak mengganggu). iTeleport di iPad saya kemudian gagal terhubung pada 5900 dan berhasil pada port unprivileged tinggi yang saya pilih.

MichaelM
sumber
Jawaban ini sekarang dapat menjadi solusi untuk digunakan dengan El Capitan 10.11.
PaulSkinner
Untuk mengonfirmasi, ini sekarang mungkin solusi terbaik untuk El Capitan 10.11 tanpa menonaktifkan rootless.
PaulSkinner
Ini berfungsi untuk Berbagi File (seseorang) juga! Saya mengubah port untuk "Microsoft-DS"
Wowfunhappy
@PaulSkinner Tidak bisa di-root-kan melindungi semuanya di / etc? (Saya menonaktifkannya sehingga saya tidak akan tahu)
Wowfunhappy
@ Wowfunhappy luar biasa, tidak.
PaulSkinner
3

Ini telah dibahas di berbagai forum di apple.com dan di macosxhints.com . Jawaban singkatnya adalah "Anda tidak dapat mengubahnya".

Jawaban yang lebih panjang menyarankan cara mengatasinya - tiga kemungkinan:

  • Gunakan perangkat lunak server VNC alternatif
  • Gunakan terowongan ssh untuk mengalihkan lalu lintas dari port khusus Anda ke 5900
  • Konfigurasikan pemetaan port di router Anda untuk mengambil lalu lintas masuk pada port yang berbeda untuk menuju ke port 5900 pada mac Anda.
Doug Harris
sumber
Demi kelengkapan: beberapa menyarankan bahwa mengubah port /etc/Servicesmungkin berguna. Saya mencobanya (saya bahkan reboot Mac saya setelah mengubahnya) tidak berhasil. Dan memikirkannya lagi, bahkan mungkin ide buruk untuk mengacaukan file itu, karena aplikasi lain mungkin juga menggunakannya untuk mendapatkan nomor port yang terkenal jika mereka ingin terhubung ke beberapa pihak ketiga menggunakan protokol tertentu. (Seperti: mengubah port SSH dalam file itu mungkin tampak berfungsi tetapi merupakan ide yang buruk .)
Arjan
1
Perhatikan jawabannya oleh Greg Canty - ini dapat diubah pada rilis OS X setelah Snow Leopard. Jawaban ini awalnya ditulis sebelum OS X Lion dirilis.
Doug Harris
1

Berdasarkan info yang diberikan oleh Greg di utas ini saya menulis skrip bash yang akan mengotomatiskan proses mengubah port mendengarkan VNC sistem Anda. Bekerja dengan baik dalam pengujian saya. Beritahu saya jika ada yang punya masalah dengannya.

#!/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 [email protected].
#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
Akan
sumber
Ketika saya mencoba mengakses tautan - saya mendapat kesalahan Server ini tidak dapat membuktikan bahwa itu adalah getome.homeftp.net; sertifikat keamanannya tidak dipercaya oleh sistem operasi komputer Anda. Ini mungkin disebabkan oleh kesalahan konfigurasi atau penyerang mencegat koneksi Anda.
Prasanna
Maaf soal itu Mureinik. Kode diposting bukan tautan.
Will
0

Untuk mengubah port default dan / atau alamat yang mengikat tanpa menonaktifkan System Integrity Protection , Anda harus membuat LaunchDaemon baru di /Library.

Sayangnya agen berbagi layar tidak akan berfungsi dengan baik ketika diberi label yang berbeda. Itu berarti daemon harus "membayangi" aslinya menggunakan nama yang sama. Itu menyebabkan masalah sendiri karena saat reboot, sistem akan memuat yang asli /Systemdan mengabaikan versi yang dimodifikasi di /Library.

Solusinya adalah dengan menonaktifkan LaunchDaemon dan menggunakan daemon "launcher" yang secara paksa akan memuat LaunchDaemon yang dimodifikasi. Namun harus berhati-hati untuk tetap mengaktifkan Berbagi Layar melalui preferensi atau membiarkannya akan berakhir dalam mode hanya mengamati .

Selangkah demi selangkah

  1. Aktifkan Berbagi Layar di Preferensi Sistem
  2. Menjalankan

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. Menjalankan

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. Di /Library/LaunchDaemons/com.apple.screensharing.plist, edit bagian Soket untuk melihat seperti yang Anda inginkan. Misalnya mendengarkan pada 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. Buat /Library/LaunchDaemons/com.apple.screensharing.launcher.plistdengan konten berikut:

    <?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. Menjalankan

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

Setelah ini, hak Berbagi Layar akan disediakan dengan benar, daemon default tidak akan dimuat secara otomatis, dan peluncur kami akan secara paksa memulai daemon khusus kami.

Mathieu H.
sumber