Mac OS X'te varsayılan ekran paylaşımı / VNC bağlantı noktası numarası nasıl değiştirilir?


Yanıtlar:


16

Aslında olabilir , Mac OS 10.7 Lion ve 10.8 Mountain Lion Apple'ın VNC sunucusunun varsayılan bağlantı noktasını açın. Bağlantı noktasını değiştirmek için sunucunun plist dosyasını düzenlemeniz gerekir /System/Library/LaunchDaemons/com.apple.screensharing.plist(bu dosya 10.7 Lion öncesi sistemlerde yoktur).

Dosyayı düzenlemek için kök (sudo) ayrıcalıkları gerekir. Terminalde, vi veya vim hakkında bilgi sahibiyseniz , aşağıdakileri yazabilirsiniz:

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

ya da değilseniz, nano kullanmanız daha iyi olur :

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

Şimdi, tek yapmanız gereken 34 nolu satırı (okunan <string>vnc-server</string>) değiştirmek, <string>nnnn</string>burada nnnn kullanmak istediğiniz port numarasıdır. "Vnc-server" gibi bir ismi bir numaraya değiştirmek garip geldiğini biliyorum, ama bunu yapmak zorundasınız. Herhangi bir şeyin net olmaması durumunda aşağıda bir örnek ekledim.

Varsayılan bağlantı noktasını 54321 olarak değiştirmek için plist dosyasını aşağıdaki gibi düzenlersiniz:

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

Dosyayı kaydettikten sonra, değişikliğin etkili olmasını sağlamak için Paylaşım tercih bölmesinde Ekran Paylaşımı'nı kapatıp yeniden açın veya alternatif olarak şu komutları kullanarak hizmeti kaldırın ve yeniden yükleyin:

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

Hala etraftaysanız - bunu yaptıktan sonra, yerleşik Mac ekran paylaşımı uygulamasını o bağlantı noktasına bağlamanız için karşılaştırılabilir bir yol var mı, yoksa Liman?
Jim Miller

2
Yukarıya cevap: "Sunucuya bağlan ..." bölümünde vnc: //yourserver.com: 54321 (önceki örnek bağlantı noktası numarasını izleyerek) belirtin
Jim Miller

Bu işe yararsa (bu gece kontrol edemem) çok daha fazla oyu hak ediyorsun.
PaulSkinner

1
Onaylamak için, evet bunu her bir OS güncellemesinden sonra yapmanız gerekir (artımlı güncellemeler dahil).
PaulSkinner

1
Buna bir not daha eklemek için, OS X 10.11 El Capitan'ın yeni 'köksüz' özelliği, bu dosyayı köksüz özelliği devre dışı bırakmadan kaydetmenin artık mümkün olmadığı anlamına gelir; Herkes köksüz devre dışı bırakmadan bir geçici çözüm biliyor?
PaulSkinner

5

Bu konuyu Google üzerinden bulduktan sonra /etc/services"rfb" bağlantı noktaları için düzenlemenin dahil edilen VNC sunucusunun dinleme bağlantı noktalarını değiştireceğini doğrulayabilirim.

Dosyayı düzenledim ve yeniden başlattım (genellikle hizmetleri yeniden başlatmayı veya launchdeamon'u boşaltmayı denerdim ama başka sorunları da vardı ve rahatsız etmedim). Daha sonra iPad'imdeki iTeleport 5900'e bağlanamadı ve seçtiğim yüksek ayrıcalıklı bağlantı noktasında başarılı oldu.


Bu cevap şimdi El Capitan 10.11 ile kullanmak için bir çözüm olabilir .
PaulSkinner

Doğrulamak için, bu muhtemelen El Capitan 10.11 için köksüzlüğü devre dışı bırakmadan en iyi çözümdür .
PaulSkinner

Bu Dosya Paylaşımı (SMB) için de işe yaradı! "Microsoft-DS" bağlantı noktasını değiştirdim
Wowfunhappy

@PaulSkinner / etc içindeki köksüzleri korumuyor mu? (Devre dışı bıraktım, bu yüzden bilmiyorum)
Wowfunhappy

@Wowfunhappy inanılmaz, hayır.
PaulSkinner

3

Bu çeşitli forumlarda tartışıldı apple.com ve üzerinde macosxhints.com . Kısa cevap "değiştiremezsiniz" dir.

Daha uzun cevaplar bunun etrafında yollar önerir - üç olasılık:

  • Alternatif VNC sunucu yazılımı kullanın
  • Trafiği özel bağlantı noktanızdan 5900'e yönlendirmek için bir ssh tüneli kullanın
  • Mac'inizdeki 5900 numaralı bağlantı noktasına gitmek için yönlendiricinizdeki bağlantı noktası eşlemesini farklı bir bağlantı noktasından gelen trafiği alacak şekilde yapılandırın.

Sadece bütünlük uğruna: bazıları limanları değiştirmenin /etc/Serviceshile yapabileceğini öne sürüyor . Bunu denedim (Mac'imi değiştirdikten sonra bile yeniden başlattım) boşuna. Ve biraz daha düşünüldüğünde, bu dosyayı karıştırmak kötü bir fikir bile olabilir, çünkü diğer uygulamalar belirli bir protokol kullanarak bazı üçüncü taraflara bağlanmak isterse tanınmış bağlantı noktası numarasını almak için de kullanabilir. (Mesela: bu dosyadaki SSH bağlantı noktasını değiştirmek işe yaramış gibi görünebilir, ancak kötü bir fikirdir .)
Arjan

1
Greg Canty'nin cevabına dikkat edin - Snow Leopard'dan sonra OS X sürümlerinde değiştirilebilir. Bu yanıt ilk olarak OS X Lion yayınlanmadan önce yazılmıştır.
Doug Harris

1

Bu konuda Greg tarafından sağlanan bilgilere dayanarak, sisteminizin VNC dinleme portunu değiştirme işlemini otomatikleştirecek bir bash betiği yazdım. Testlerimde iyi çalışıyor. Herhangi bir sorun olup olmadığını bana bildirin.

#!/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

Bağlantıya erişmeye çalıştığımda - hatayı aldım Bu sunucu getsome.homeftp.net olduğunu kanıtlayamadı; güvenlik sertifikasına bilgisayarınızın işletim sistemi tarafından güvenilmez. Bunun nedeni, yanlış bir yapılandırma veya bağlantınızı kesen bir saldırgan olabilir.
Prasanna

Mureinik için üzgünüm. Bağlantı yerine kod gönderildi.
Will

0

Sistem Bütünlüğü Korumasını devre dışı bırakmadan varsayılan bağlantı noktasını ve / veya bağlama adresini değiştirmek için, içinde yeni bir LaunchDaemon oluşturmanız gerekir /Library.

Ne yazık ki farklı bir etiket atandığında ekran paylaşım aracısı düzgün çalışmayacak. Bu, arka plan programının aynı adı kullanarak orijinali "gölgelemesi" gerektiği anlamına gelir. Bu, kendi sorunlarına neden olur, çünkü yeniden başlatma sırasında sistem orijinali yükler /Systemve değiştirilen sürümü yok sayar /Library.

Çözüm, LaunchDaemon'u devre dışı bırakmak ve değiştirilmiş LaunchDaemon'u zorla yükleyecek bir "başlatıcı" arka plan programı kullanmaktır. Bununla birlikte, Ekran Paylaşımı'nı tercihler aracılığıyla etkinleştirmeye özen gösterilmelidir, aksi takdirde yalnızca gözlemleme modunda sona erer .

Adım adım

  1. Sistem Tercihlerinde Ekran Paylaşmayı Etkinleştirin
  2. gerçekleştirmek

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. gerçekleştirmek

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. Alanında /Library/LaunchDaemons/com.apple.screensharing.plist, nasıl olmasını istediğinizi görmek için Yuvalar bölümünü düzenleyin. Örneğin 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. Oluşturmak /Library/LaunchDaemons/com.apple.screensharing.launcher.plistşu içeriğe sahip:

    <?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. gerçekleştirmek

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

Bundan sonra, Ekran Paylaşma hakları düzgün şekilde sağlanacak, varsayılan arka plan programı otomatik olarak yüklenmeyecek ve başlatıcımız zorla özelleştirilmiş arka plan programımızı başlatacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.