Есть ли способ изменить его с 5900
по умолчанию на другой порт?
4 ответа
На самом деле вы можете переключить порт по умолчанию для 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
После нахождения этой темы через Google я могу подтвердить, что редактирование /etc/services
для портов "rfb" изменит порты прослушивания включенного VNC-сервера.
Я отредактировал файл и перезагрузил компьютер (обычно я пытался перезапустить службы или выгрузить файл запуска, но у меня были и другие проблемы, и я не беспокоился). iTeleport на моем iPad тогда не смог соединиться на 5900 и преуспел на высоком непривилегированном порте, который я выбрал.
Это обсуждалось на различных форумах на apple.com и macosxhints.com. Короткий ответ:«Вы не можете это изменить».
Более длинные ответы предлагают способы обойти это - три возможности:
- Используйте альтернативное программное обеспечение VNC-сервера
- Используйте туннель ssh для перенаправления трафика с вашего пользовательского порта на 5900
- Настройте сопоставление портов в маршрутизаторе, чтобы принимать входящий трафик через другой порт и переходить на порт 5900 на компьютере Mac.
Основываясь на информации, предоставленной Грегом в этой теме, я написал скрипт bash, который автоматизирует процесс изменения порта прослушивания VNC в вашей системе. Хорошо работает в моих тестах. Дайте мне знать, если у кого-то есть какие-либо проблемы с этим.
#!/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