Wie ändere ich die Standard-Bildschirmfreigabe- / VNC-Portnummer unter Mac OS X?


Antworten:


16

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

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

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

oder wenn nicht, verwenden Sie besser Nano :

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

Jetzt müssen Sie nur noch Zeile 34 (die lesende Zeile <string>vnc-server</string>) <string>nnnn</string>in nnnn ändern , wobei nnnn die Portnummer ist, die Sie verwenden möchten. Ich weiß, es scheint seltsam, einen Namen wie "vnc-server" in eine Zahl zu ändern, aber so muss man es machen. Ich habe unten ein Beispiel beigefügt, falls etwas nicht klar ist.

Um den Standardport auf 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>

Um die Änderung wirksam zu machen, schalten Sie nach dem Speichern der Datei die Bildschirmfreigabe im Einstellungsbereich "Freigabe" aus und wieder ein oder entladen Sie den Dienst und laden Sie ihn erneut mit den folgenden Befehlen:

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

Wenn Sie noch in der Nähe sind - wenn Sie dies getan haben, gibt es eine vergleichbare Möglichkeit, die integrierte Mac-Bildschirmfreigabe-App für die Verbindung mit diesem Port zu verwenden, oder wenn Sie nicht mehr mit VNC-Apps von Drittanbietern arbeiten können, mit denen Sie die angeben können Hafen?
Jim Miller

2
Antwort auf oben: Geben Sie unter "Mit Server verbinden ..." vnc: //yourserver.com: 54321 an (gemäß dem früheren Beispiel für die Portnummer)
Jim Miller,

Wenn dies funktioniert (ich kann es bis heute Abend nicht überprüfen), verdienen Sie viel mehr Upvotes.
PaulSkinner

1
Zur Bestätigung müssen Sie dies nach jedem Betriebssystem-Update (einschließlich inkrementeller Updates) tun.
PaulSkinner

1
Um noch einen Hinweis hinzuzufügen, bedeutet die neue Funktion "Rootless" von OS X 10.11 El Capitan, dass es nicht mehr möglich ist, diese bestimmte Datei zu speichern, ohne die Rootless-Funktion zu deaktivieren, was nicht empfohlen wird. Kennt jemand eine Problemumgehung, ohne rootless zu deaktivieren?
PaulSkinner

5

Nachdem ich diesen Thread über Google gefunden habe, kann ich bestätigen, dass durch das Bearbeiten /etc/servicesder "rfb" -Ports die Überwachungsports des enthaltenen VNC-Servers geändert werden.

Ich habe die Datei bearbeitet und neu gestartet (normalerweise habe ich versucht, die Dienste neu zu starten oder das Launchdeamon zu entladen, aber ich hatte auch einige andere Probleme und habe mich nicht darum gekümmert). iTeleport auf meinem iPad konnte dann auf 5900 keine Verbindung herstellen und war auf dem von mir ausgewählten, nicht privilegierten Port erfolgreich.


Diese Antwort kann nun die Lösung für El Capitan 10.11 sein.
PaulSkinner

Zur Bestätigung ist dies jetzt wahrscheinlich die beste Lösung für El Capitan 10.11, ohne rootless zu deaktivieren.
PaulSkinner

Dies funktionierte auch für File Sharing (jdm)! Ich habe den Port für "Microsoft-DS"
geändert

@PaulSkinner Schützt rootless nicht alles in / etc? (Ich habe es deaktiviert, damit ich es nicht weiß)
Wowfunhappy

@ Wowfunhappy erstaunlich, nein.
PaulSkinner

3

Dies wurde in verschiedenen Foren auf apple.com und auf macosxhints.com diskutiert . Die kurze Antwort lautet "Sie können es nicht ändern".

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

  • Verwenden Sie eine alternative VNC-Serversoftware
  • 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 auf einem anderen Port auf Port 5900 auf Ihrem Mac übertragen wird.

Nur der Vollständigkeit halber: Einige schlagen vor, dass das Ändern der Ports /etc/Servicesden Trick tun könnte. Ich habe das ohne Erfolg versucht (ich habe sogar meinen Mac nach dem Ändern neu gestartet). Wenn Sie noch etwas darüber nachdenken, ist es möglicherweise sogar eine schlechte Idee, mit dieser Datei herumzuspielen, da andere Anwendungen sie möglicherweise auch verwenden, um die bekannte Portnummer abzurufen, wenn sie über ein bestimmtes Protokoll eine Verbindung zu einem Drittanbieter herstellen möchten. (Wie: Das Ändern des SSH-Ports in dieser Datei scheint zu funktionieren, ist aber eine schlechte Idee .)
Arjan

1
Beachten Sie die Antwort von Greg Canty - sie kann in OS X-Versionen nach Snow Leopard geändert werden. Diese Antwort wurde ursprünglich geschrieben, bevor OS X Lion veröffentlicht wurde.
Doug Harris

1

Basierend auf den Informationen, die Greg in diesem Thread bereitgestellt hat, habe ich ein Bash-Skript geschrieben, das den Prozess des Änderns des VNC-Listening-Ports Ihres Systems automatisiert. Funktioniert gut in meinen Tests. Lassen Sie mich wissen, wenn 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 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

Als ich versuchte, auf den Link zuzugreifen, wurde der Fehler angezeigt. Dieser Server konnte nicht beweisen, dass es sich um getome.homeftp.net handelt. Das Sicherheitszertifikat wird vom Betriebssystem Ihres Computers nicht als vertrauenswürdig eingestuft. Dies kann durch eine Fehlkonfiguration oder einen Angreifer verursacht werden, der Ihre Verbindung abfängt.
Prasanna

Entschuldigung für diesen Mureinik. Code anstelle eines Links gepostet.
Wird

0

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

Leider funktioniert der Bildschirmfreigabeagent nicht ordnungsgemäß, wenn ihm eine andere Bezeichnung zugewiesen wird. Das bedeutet, dass der Dämon das Original mit demselben Namen "beschatten" muss. Dies verursacht eigene Probleme, da das System beim Neustart das Original in lädt /Systemund die geänderte Version in ignoriert /Library.

Die Lösung besteht darin, den LaunchDaemon zu deaktivieren und einen "Launcher" -Dämon zu verwenden, der den geänderten LaunchDaemon zwangsweise lädt. Es muss jedoch darauf geachtet werden, die Bildschirmfreigabe weiterhin über die Einstellungen zu aktivieren, da sie sonst nur im Beobachtungsmodus angezeigt wird .

Schritt für Schritt

  1. Aktivieren Sie die Bildschirmfreigabe in den Systemeinstellungen
  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 die Sockets Abschnitt zu sehen , wie Sie es wollen. Zum Beispiel zuhören 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. Erstellen Sie /Library/LaunchDaemons/com.apple.screensharing.launcher.plistmit 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 Bildschirmfreigaberechte ordnungsgemäß bereitgestellt, der Standarddämon wird nicht automatisch geladen und unser Launcher startet zwangsweise unseren benutzerdefinierten Dämon.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.