Como alterar o número da porta padrão de compartilhamento de tela / VNC no Mac OS X?


Respostas:


16

Na verdade, você pode alternar a porta padrão para o servidor VNC da Apple no Mac OS 10.7 Lion e 10.8 Mountain Lion. Para alterar a porta, você precisa editar o arquivo plist do servidor /System/Library/LaunchDaemons/com.apple.screensharing.plist(esse arquivo não existe nos sistemas anteriores à versão 10.7 Lion).

A edição do arquivo requer privilégios de root (sudo). No terminal, se você estiver familiarizado com o vi ou vim , poderá digitar:

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

ou, se não estiver, é melhor usar o nano :

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

Agora, tudo que você precisa fazer é mudar a linha 34 (a que lê <string>vnc-server</string>) para <string>nnnn</string>onde nnnn é o número da porta que você deseja usar. Eu sei que parece estranho mudar um nome como "vnc-server" para um número, mas é assim que você deve fazer. Incluí um exemplo abaixo, caso algo não esteja claro.

Para alterar a porta padrão para 54321, edite o arquivo plist para ficar assim:

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

Depois de salvar o arquivo, para que a alteração entre em vigor, desative o compartilhamento de tela e ligue-o novamente no painel de preferências Compartilhamento ou, alternativamente, descarregue e recarregue o serviço usando estes comandos:

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

Se você ainda estiver por aí - depois de fazer isso, existe uma maneira comparável de conectar o aplicativo de compartilhamento de tela do Mac a essa porta ou se você estiver usando aplicativos vnc de terceiros que permitem especificar o porta?
— 21713 Jim Miller

2
Resposta acima: Em "Conectar-se ao servidor ...", especifique vnc: //yourserver.com: 54321 (seguindo o exemplo anterior número da porta)
— Jim Miller

Se isso funcionar (não posso verificar até hoje à noite), você merece muito mais votos.
— 21313 PaulSkinner

1
Para confirmar, sim, você precisaria fazer isso após cada atualização do sistema operacional (incluindo atualizações incrementais).
— 21413 PaulSkinner #

1
Para adicionar mais uma observação, o novo recurso 'sem raiz' do OS X 10.11 El Capitan significa que não é mais possível salvar esse arquivo específico sem desativar o recurso sem raiz, o que não é recomendado. Alguém conhece uma solução alternativa sem desativar o rootless?
— PaulSkinner

5

Posso confirmar, depois de encontrar este tópico no Google, que a edição /etc/servicesdas portas "rfb" alterará as portas de escuta do servidor VNC incluídas.

Editei o arquivo e reiniciei (normalmente tentaria reiniciar os serviços ou descarregar o launchdeamon, mas também estava tendo outros problemas e não me incomodei). O iTeleport no meu iPad falhou na conexão no 5900 e teve êxito na porta alta e sem privilégios que eu escolhi.


Essa resposta agora pode ser a solução a ser usada com o El Capitan 10.11.
— PaulSkinner

Para confirmar, agora é provavelmente a melhor solução para o El Capitan 10.11 sem desativar o rootless.
— PaulSkinner

Isso funcionou também para compartilhamento de arquivos (smb)! Eu mudei a porta para "Microsoft-DS"
— Wowfunhappy 2/17/17

@PaulSkinner O rootless não protege tudo em / etc? (Eu tê-lo desativado, então eu não sei)
— Wowfunhappy

@Wowfunhappy amazingly, no.
— PaulSkinner 02/09

3

Isso foi discutido em vários fóruns em apple.com e macosxhints.com . A resposta curta é "você não pode mudar".

As respostas mais longas sugerem maneiras de contornar isso - três possibilidades:

  • Use software de servidor VNC alternativo
  • Use um túnel ssh para redirecionar o tráfego da sua porta personalizada para o 5900
  • Configure o mapeamento de portas no seu roteador para receber o tráfego de uma porta diferente e acessar a porta 5900 no seu mac.

Apenas por uma questão de integridade: alguns sugerem que alterar as portas /etc/Servicespode fazer o truque. Eu tentei isso (eu até reiniciei o meu Mac depois de alterá-lo) sem sucesso. E, pensando um pouco mais, pode até ser uma má idéia mexer com esse arquivo, pois outros aplicativos também podem usá-lo para obter o número de porta conhecido, se quiserem se conectar a terceiros usando um protocolo específico. (Como: alterar a porta SSH no arquivo que pode parecer para trabalho, mas é uma má idéia .)
— Arjan

1
Observe a resposta de Greg Canty - ela pode ser alterada nas versões do OS X após o Snow Leopard. Esta resposta foi originalmente escrita antes do lançamento do OS X Lion.
— Doug Harris

1

Com base nas informações fornecidas por Greg neste tópico, escrevi um script bash que automatizará o processo de alteração da porta de escuta VNC do seu sistema. Funciona bem nos meus testes. Deixe-me saber se alguém tem algum problema com isso.

#!/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

Quando tentei acessar o link - recebi o erro Este servidor não pôde provar que é o getsome.homeftp.net; seu certificado de segurança não é confiável pelo sistema operacional do seu computador. Isso pode ser causado por uma configuração incorreta ou por um invasor que interceptou sua conexão.
— Prasanna

Desculpe por isso Mureinik. Código postado em vez de um link.
— Will

0

Para alterar a porta padrão e / ou o endereço de ligação sem desativar o System Integrity Protection , é necessário criar um novo LaunchDaemon no /Library.

Infelizmente, o agente de compartilhamento de tela não funcionará corretamente quando for atribuído um rótulo diferente. Isso significa que o daemon deve estar "sombreando" o original usando o mesmo nome. Isso causa seus próprios problemas, porque, na reinicialização, o sistema carrega o original /Systeme ignora a versão modificada /Library.

A solução é desativar o LaunchDaemon e usar um daemon "launcher" que carregará à força o LaunchDaemon modificado. No entanto, é necessário ter cuidado para ainda ativar o compartilhamento de tela através das preferências ou, caso contrário, ele terminará no modo somente observação .

Passo a passo

  1. Ative o compartilhamento de tela nas preferências do sistema
  2. Executar

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. Executar

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. Em /Library/LaunchDaemons/com.apple.screensharing.plist, edite a seção Soquetes para obter a aparência desejada. Por exemplo, ouvindo 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. Crie /Library/LaunchDaemons/com.apple.screensharing.launcher.plistcom o seguinte conteúdo:

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

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

Depois disso, os direitos de compartilhamento de tela serão provisionados corretamente, o daemon padrão não será carregado automaticamente e nosso iniciador iniciará à força nosso daemon personalizado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.