Как изменить используемый по умолчанию номер экрана общего доступа / номер порта VNC в Mac OS X?

36972
GJ.

Есть ли способ изменить его со стандартного 5900на другой порт?

10
По крайней мере отключите соединения от всего, кроме localhost, до 5900; [Защита OS X с помощью ipfw - CS Labs Wiki] (http://docs.cslabs.clarkson.edu/wiki/Securing_OS_X_with_ipfw) 13 лет назад 0

4 ответа на вопрос

15
Greg Canty

Вы действительно можете переключить порт по умолчанию для VNC-сервера Apple в Mac OS 10.7 Lion и 10.8 Mountain Lion. Чтобы изменить порт, вам нужно отредактировать файл plist сервера /System/Library/LaunchDaemons/com.apple.screensharing.plist(этот файл не существует в системах до 10.7 Lion).

Редактирование файла требует прав root (sudo). В терминале, если вы знакомы с vi или vim, вы можете ввести:

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

или если нет, то лучше использовать nano :

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 11 лет назад 0
Ответ на этот вопрос: в «Connect to server ...» укажите vnc: //yourserver.com: 54321 (следуя предыдущему примеру с номером порта) Jim Miller 11 лет назад 2
Если это работает (я не могу проверить до сегодняшнего вечера), вы заслуживаете гораздо больше голосов. PaulSkinner 11 лет назад 0
Кстати, это так. Подтвердили работу без нареканий. Я думаю, вам, вероятно, придется повторять эти шаги после каждого обновления ОС, но все же ... PaulSkinner 11 лет назад 0
Чтобы подтвердить, да, вам нужно будет делать это после каждого обновления ОС (включая инкрементные обновления). PaulSkinner 11 лет назад 1
Чтобы добавить еще одно примечание к этому, новая функция «без root» в OS X 10.11 El Capitan означает, что больше невозможно сохранить этот конкретный файл без отключения функции без root, что не рекомендуется. Кто-нибудь знает обходной путь без отключения root? PaulSkinner 9 лет назад 1
Чтобы связать его с localhost вместо всех интерфейсов, измените ключ с Bonjour на SockNodeName и строку с rfb на 127.0.0.1 Erlend 9 лет назад 0
Я не могу отредактировать файл независимо от того, что я делаю. Редактор VIM говорит, что не могу открыть файл для записи. Я вошел в систему как суперпользователь, я даже не могу изменить разрешения или владельцев файла, как будто я полностью заблокирован. Есть идеи? Joseph Astrahan 6 лет назад 0
5
MichaelM

I can confirm after finding this thread via Google that editing /etc/services for the "rfb" ports will change the included VNC server's listening ports.

I edited the file and rebooted (usually I'd try restarting services or unloading the launchdeamon but I was having some other issues as well and didn't bother). iTeleport on my iPad then failed to connect on 5900 and succeeded on the high unprivileged port I chose.

Этот ответ * может * теперь стать решением для использования с El Capitan 10.11. PaulSkinner 9 лет назад 0
Чтобы подтвердить, это теперь _проблемно_ лучшее решение для El Capitan 10.11 ** без ** отключения без root. PaulSkinner 9 лет назад 0
Это сработало и для обмена файлами (smb)! Я изменил порт для «Microsoft-DS» Wowfunhappy 7 лет назад 0
@PaulSkinner Не защищает ли root-файлы все в / etc? (У меня отключено, чтобы я не знал) Wowfunhappy 7 лет назад 0
@ Ничего удивительного, нет. PaulSkinner 7 лет назад 0
3
Doug Harris

Это обсуждалось на различных форумах на apple.com и macosxhints.com . Короткий ответ: «Вы не можете это изменить».

Более длинные ответы предлагают способы обойти это - три возможности:

  • Используйте альтернативное программное обеспечение VNC-сервера
  • Используйте туннель ssh для перенаправления трафика с вашего пользовательского порта на 5900
  • Настройте сопоставление портов в маршрутизаторе, чтобы принимать входящий трафик через другой порт и переходить на порт 5900 на компьютере Mac.
Просто для полноты картины: некоторые предполагают, что изменение портов в `/ etc / Services` может помочь. Я попробовал это (я даже перезагрузил мой Mac после изменения) безрезультатно. И если подумать, может быть плохой идеей связываться с этим файлом, так как другие приложения могут также использовать его для получения известного номера порта, если они хотят подключиться к какой-либо третьей стороне, используя определенный протокол. (Например: изменение порта SSH в этом файле может показаться эффективным, но [это плохая идея] (http://serverfault.com/questions/18761/how-to-change-sshd-port-on-mac-os- х / 67616 # 67616).) Arjan 13 лет назад 0
Обратите внимание на ответ Грега Канти - его можно изменить в выпусках OS X после Snow Leopard. Этот ответ был изначально написан до выхода OS X Lion. Doug Harris 10 лет назад 1
1
Will

Based on the info provided by Greg in this thread I wrote a bash script that will automate the process of changing your system's VNC listening port. Works well in my tests. Let me know if anyone has any issues with it.

#!/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 /SockServiceName/ ' | awk -F "<|>" ''` os_version=`sw_vers -productVersion` os_version_aug=`sw_vers -productVersion | awk -F "." ''` sip_status=`csrutil status | awk ''` #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 "$This Script Must Run As Root$\n" exit 0 fi clear printf $;echo "---------------------------------------------------------------" echo "--- ---" echo "--- This Script Will Change Your Systems VNC Listening Port ---" echo "--- Hit Ctrl + c to exit at anytime ---" echo "--- ---" echo "---------------------------------------------------------------";printf "$\n" #Check System Version sleep 1 if [ "$" -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 [ "$" == "1011" ]; then if [ "$" == "enabled." ]; then echo "" printf "$••• System Integrity Protection is Enabled •••$\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 [ "$" == "vnc-server" ]; then echo "" echo "The System's VNC Port is Currently" echo "Set to the System Default Port of 5900." echo "--------" elif [ "$" != "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 [ "$" == "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 9 лет назад 0
Извините за это Мурейник. Код размещен вместо ссылки. Will 9 лет назад 0