Wie ändere ich die standardmäßige Bildschirmfreigabe / VNC-Portnummer unter Mac OS X?

Gibt es eine Möglichkeit, es von der Standardeinstellung 5900 in einen anderen Port zu ändern?

Author: slhck, 2010-06-02

5 answers

Sie können tatsächlich den Standardport für Apples VNC-Server unter Mac OS 10.7 Lion und 10.8 Mountain Lion wechseln. Um den Port zu ändern, müssen Sie die Plist-Datei des Servers /System/Library/LaunchDaemons/com.apple.screensharing.plist bearbeiten (diese Datei ist in Systemen vor 10.7 Lion nicht vorhanden).

Das Bearbeiten der Datei erfordert Root-Rechte (sudo). Wenn Sie im Terminal mit vi oder vim vertraut sind, können Sie Folgendes eingeben:

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

Oder wenn Sie nicht sind, sollten Sie nano:

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

Nun, ihr alle sie müssen Zeile 34 (diejenige, die <string>vnc-server</string> liest) in <string>nnnn</string> ändern, wobei nnnn die Portnummer ist, die Sie verwenden möchten. Ich weiß, es scheint seltsam, einen Namen wie "vnc-Server" in eine Nummer zu ändern, aber so müssen Sie es tun. Ich habe unten ein Beispiel eingefügt, falls etwas nicht klar ist.

Um den Standardport in 54321 zu ändern, bearbeiten Sie die Plist-Datei folgendermaßen:

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

Schalten Sie nach dem Speichern der Datei die Bildschirmfreigabe aus und dann wieder ein, damit die Änderung wirksam wird. im Bereich "Freigabeeinstellungen" oder alternativ mit den folgenden Befehlen den Dienst entladen und neu laden:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist
 16
Author: Greg Canty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-12-15 19:47:12

Ich kann bestätigen, nachdem ich diesen Thread über Google gefunden habe, dass durch Bearbeiten von /etc/services für die " rfb " - Ports die Listening-Ports des enthaltenen VNC-Servers geändert werden.

Ich habe die Datei bearbeitet und neu gestartet (normalerweise würde ich versuchen, Dienste neu zu starten oder den Launchdeamon zu entladen, aber ich hatte auch einige andere Probleme und störte mich nicht). iTeleport auf meinem iPad konnte dann keine Verbindung zu 5900 herstellen und war an dem von mir gewählten hohen, nicht privilegierten Port erfolgreich.

 5
Author: MichaelM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-10-14 01:46:04

Dies wurde diskutiert über verschiedene Foren bei apple.com und macosxhints.com. Die kurze Antwort lautet "Sie können es nicht ändern".

Die längeren Antworten schlagen Wege vor - drei Möglichkeiten:

  • Verwenden Sie alternative VNC-Server-Software
  • Verwenden Sie einen SSH-Tunnel, um den Datenverkehr von Ihrem benutzerdefinierten Port auf 5900 umzuleiten
  • Konfigurieren Sie die Portzuordnung in Ihrem Router so, dass eingehender Datenverkehr über einen anderen Port auf Port 5900 auf Ihrem Mac übertragen wird.
 3
Author: Doug Harris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-06-02 18:06:51

Basierend auf den Informationen von Greg in diesem Thread habe ich ein Bash-Skript geschrieben, das den Prozess des Änderns des VNC-Abhörports Ihres Systems automatisiert. Funktioniert gut in meinen Tests. Lassen Sie mich wissen, ob jemand Probleme damit hat.

#!/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
 1
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-02-02 18:42:06

Um den Standardport und/oder die Bindungsadresse zu ändern, ohne System Integrity Protection zu deaktivieren, müssen Sie in /Library einen neuen LaunchDaemon erstellen.

Leider funktioniert der Screen Sharing Agent nicht richtig, wenn ein anderes Label zugewiesen wird. Das bedeutet, dass der Daemon das Original mit demselben Namen "beschatten" muss. Das verursacht eigene Probleme, da das System beim Neustart das Original in /System lädt und die geänderte Version in /System ignoriert /Library.

Die Lösung besteht darin, den LaunchDaemon zu deaktivieren und einen "Launcher" - Daemon zu verwenden, der den geänderten LaunchDaemon gewaltsam lädt. Es muss jedoch darauf geachtet werden, die Bildschirmfreigabe weiterhin über die Einstellungen zu aktivieren orelse es wird in endup Beobachten Sie nur Modus.

Schritt für Schritt

  1. Bildschirmfreigabe in den Systemeinstellungen aktivieren
  2. Ausführen

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. Ausführen

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. In /Library/LaunchDaemons/com.apple.screensharing.plist, " Bearbeiten der Abschnitt Sockets, um zu sehen, wie Sie es wollen. Zum Beispiel hören auf 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. Erstelle /Library/LaunchDaemons/com.apple.screensharing.launcher.plist mit folgendem Inhalt:

    <?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. Ausführen

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

Danach werden die Rechte für die Bildschirmfreigabe ordnungsgemäß bereitgestellt, der Standard-Daemon wird nicht automatisch geladen und unser Launcher startet unseren benutzerdefinierten Daemon gewaltsam.

 0
Author: Mathieu H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-12-21 17:29:49