Як змінити стандартний екран доступу / номер порта VNC на Mac OS X?


Відповіді:


16

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

Для редагування файлу потрібні права root (sudo). У терміналі, якщо ви знайомі з vi або vim , ви можете ввести:

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

або якщо вас немає, краще використовувати нано :

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

Тепер все, що вам потрібно зробити, - це змінити рядок 34 (той, який читається <string>vnc-server</string>) на те, <string>nnnn</string>де nnnn - номер порту, який ви хочете використовувати. Я знаю, що здається дивним зміна імені типу "vnc-сервер" на номер, але це так, як ви повинні це зробити. Я долучив приклад нижче, якщо щось не зрозуміло.

Щоб змінити порт за замовчуванням на 54321, ви відредагували файл плісту таким чином:

...
<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, які дозволяють вказати порт?
Джим Міллер

2
Відповідь на вище: у "Підключення до сервера ..." вкажіть vnc: //yourserver.com: 54321 (за попереднім прикладом повторного номера порту)
Джим Міллер

Якщо це працює (я не можу перевірити до сьогоднішнього вечора), ви заслуговуєте на набагато більше результатів.
PaulSkinner

1
Для підтвердження, так, вам потрібно буде це зробити після кожного оновлення ОС (включаючи додаткові оновлення).
PaulSkinner

1
Щоб додати ще одну примітку до цього, нова функція "без корінь" OS X 10.11 El Capitan означає, що неможливо зберегти цей конкретний файл без відключення функції без корінь, що не рекомендується. Хтось знає вирішення без відключення безробітних?
PaulSkinner

5

Я можу підтвердити, знайшовши цю тему через Google, що редагування /etc/servicesпортів "rfb" змінить включені порти прослуховування сервера VNC.

Я відредагував файл і перезавантажився (як правило, я б спробував перезапустити служби або вивантажувати запуск, але у мене виникли і інші проблеми, і не турбував). iTeport на моєму iPad тоді не вдалося підключитися на 5900 і досяг успіху на високому непривілейованому порту, який я вибрав.


Ця відповідь може бути вирішенням для використання з El Capitan 10.11.
PaulSkinner

Для підтвердження, це, мабуть, найкраще рішення для El Capitan 10.11, не вимикаючи безробітних.
PaulSkinner

Це працювало і для спільного використання файлів (smb)! Я змінив порт на "Microsoft-DS"
Wowfunhappy

@PaulSkinner Чи не захищає без корінь усе в / тощо? (У мене його відключено, тому я не знаю)
Wowfunhappy

@Wowfunhappy дивовижно, ні.
PaulSkinner

3

Про це йшлося на різних форумах у apple.com та на macosxhints.com . Коротка відповідь - "ви не можете її змінити".

Більш довгі відповіді пропонують шляхи її подолання - три можливості:

  • Використовуйте альтернативне серверне програмне забезпечення VNC
  • Використовуйте тунель ssh для перенаправлення трафіку зі свого користувацького порту на 5900
  • Налаштуйте зіставлення портів у своєму маршрутизаторі, щоб зайняти вхідний трафік на інший порт, щоб перейти до порту 5900 на вашому mac.

Просто задля повноти: деякі припускають, що зміна портів /etc/Servicesможе зробити трюк. Я спробував це (я навіть перезавантажив свій Mac після зміни його) безрезультатно. І, подумавши про це, може бути навіть поганою ідеєю зіпсувати цей файл, оскільки інші програми також можуть використовувати його для отримання відомого номера порту, якщо вони хочуть підключитися до якоїсь сторонньої сторони за допомогою певного протоколу. (Як-от: зміна порту SSH у цьому файлі може здатися справною, але це погана ідея .)
Arjan

1
Зверніть увагу на відповідь Грега Канті - її можна змінити на версії OS X після Snow Leopard. Ця відповідь була спочатку написана до виходу OS X Lion.
Дуг Харріс

1

На основі інформації, наданої Грегом у цій темі, я написав скрипт 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

Коли я намагався отримати доступ до посилання - я отримав помилку Цей сервер не міг довести, що це getome.homeftp.net; його сертифікат безпеки не довіряється операційній системі вашого комп'ютера. Це може бути викликано неправильною конфігурацією або зловмисником, що перехоплює ваше з'єднання.
Прасанна

Вибачте про це Мурейник. Код розміщений замість посилання.
Буде

0

Щоб змінити порт за замовчуванням та / або адресу прив’язки, не вимикаючи Захист системної цілісності , потрібно створити новий LaunchDaemon в /Library.

На жаль, агент обміну екраном не працюватиме належним чином, коли йому призначено іншу мітку. Це означає, що демон повинен "тіняти" оригінал, використовуючи те саме ім'я. Це спричиняє власні проблеми, оскільки при перезавантаженні система завантажить оригінал в /Systemі ігнорує модифіковану версію в /Library.

Рішення полягає в тому, щоб відключити LaunchDaemon і використовувати демон "пуска", який буде насильно завантажувати модифікований LaunchDaemon. Однак потрібно бути обережним, щоб все-таки активувати Спільний доступ до екрана за допомогою налаштувань орелсе він закінчиться лише в режимі спостереження .

Крок за кроком

  1. Активуйте загальний доступ до екрана в налаштуваннях системи
  2. Виконати

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. Виконати

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. В /Library/LaunchDaemons/com.apple.screensharing.plist, редагувати сокети розділ , щоб подивитися , як ви хочете його. Наприклад, слухати 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. Створіть /Library/LaunchDaemons/com.apple.screensharing.launcher.plistіз наступним вмістом:

    <?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. Виконати

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

Після цього права на загальний доступ до екрана будуть належним чином налаштовані, демон за замовчуванням не завантажиться автоматично, і наш пусковий пристрій примусово запустить наш індивідуальний демон.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.