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
Greg Canty
fonte
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.

MichaelM
fonte
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.
Doug Harris
fonte
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 [email protected].
#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
Vai
fonte
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.

Mathieu H.
fonte