Mac OS X에서 기본 화면 공유 / VNC 포트 번호를 변경하는 방법은 무엇입니까?


답변:


16

실제로 Mac OS 10.7 Lion 및 10.8 Mountain Lion에서 Apple VNC 서버의 기본 포트를 전환 할 수 있습니다 . 포트를 변경하려면 서버의 plist 파일을 편집해야합니다 /System/Library/LaunchDaemons/com.apple.screensharing.plist(이 파일은 10.7 Lion 이전의 시스템에는 존재하지 않습니다).

파일을 편집하려면 루트 (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

2
위의 답변 : "서버에 연결 ..."에서 vnc : //yourserver.com : 54321을 지정하십시오 (이전의 예제 포트 번호 뒤에)
Jim Miller

이것이 효과가 있다면 (오늘 밤까지 확인할 수 없습니다) 당신은 훨씬 더 공감할 가치가 있습니다.
PaulSkinner

1
확인하려면 예, 각 OS 업데이트 (증분 업데이트 포함) 후에이 작업을 수행해야합니다.
PaulSkinner

1
OS X 10.11 El Capitan의 새로운 '루트리스 (rootless)'기능은 이에 대한 참고 사항을 하나 더 추가하기 위해 루트리스 기능을 비활성화하지 않고는이 특정 파일을 더 이상 저장할 수 없으므로 권장하지 않습니다. 누구나 루트를 비활성화하지 않고 해결 방법을 알고 있습니까?
PaulSkinner

5

Google에서이 스레드를 찾은 후 /etc/services"rfb"포트 를 편집 하면 포함 된 VNC 서버의 청취 포트가 변경 된다는 것을 확인할 수 있습니다 .

파일을 편집하고 재부팅했습니다 (일반적으로 서비스를 다시 시작하거나 런칭 데몬을 언로드하려고 시도했지만 다른 문제가 있었고 귀찮게하지 않았습니다). 내 iPad의 iTeleport는 5900에서 연결하지 못했고 선택한 높은 특권 포트에서 성공했습니다.


이 답변 이제 El Capitan 10.11과 함께 사용할 수 있습니다.
PaulSkinner

확인하기 위해 이것은 루트 없는 기능을 해제 하지 않고 El Capitan 10.11에 가장 적합한 솔루션 일 것입니다 .
PaulSkinner

이것은 파일 공유 (smb)에서도 효과적이었습니다! "Microsoft-DS"포트를 변경했습니다
Wowfunhappy

@PaulSkinner 루트가 / etc의 모든 것을 보호하지 않습니까? (나는 그것을 사용하지 못하도록 몰랐다)
Wowfunhappy

@Wowfunhappy는 놀랍게도 아닙니다.
PaulSkinner

3

이것은에서 다양한 포럼에서 논의 된 apple.com 과에 macosxhints.com . 짧은 대답은 "변경할 수 없습니다"입니다.

답변이 길수록 세 가지 가능성이 있습니다.

  • 대체 VNC 서버 소프트웨어 사용
  • SSH 터널을 사용하여 트래픽을 사용자 지정 포트에서 5900으로 리디렉션
  • 라우터에서 포트 매핑을 구성하여 다른 포트에서 들어오는 트래픽을 가져 와서 Mac의 포트 5900으로 이동하십시오.

완전성을 위해 포트를 변경 /etc/Services하면 트릭을 수행 할 수 있다고 제안하는 사람들도 있습니다. 나는 그것을 시도한 후에도 (나는 Mac을 변경 한 후에 재부팅했다) 아무 소용이 없었다. 그리고 다른 응용 프로그램이 특정 프로토콜을 사용하여 타사에 연결하려는 경우 잘 알려진 포트 번호를 얻는 데 사용할 수 있으므로 파일을 엉망으로 만드는 것은 나쁜 생각 일 수도 있습니다. (좋아요 : 해당 파일에서 SSH 포트를 변경하는 것은 효과가있을 수 있지만 나쁜 생각 입니다.)
Arjan

1
Greg Canty의 답변에 주목하십시오. Snow Leopard 이후 OS X 릴리스에서 변경 될 수 있습니다. 이 답변은 원래 OS X Lion이 출시되기 전에 작성되었습니다.
더그 해리스

1

이 스레드에서 Greg가 제공 한 정보를 기반으로 시스템의 VNC 수신 포트 변경 프로세스를 자동화하는 bash 스크립트를 작성했습니다. 내 테스트에서 잘 작동합니다. 누구든지 문제가 있으면 알려주세요.

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

링크에 액세스하려고 할 때 오류가 발생했습니다. 이 서버는 그것이 getsome.homeftp.net임을 증명할 수 없습니다. 컴퓨터의 운영 체제에서 보안 인증서를 신뢰하지 않습니다. 구성이 잘못되었거나 공격자가 연결을 가로 채기 때문일 수 있습니다.
Prasanna

그 Mureinik에 대해 죄송합니다. 링크 대신 코드가 게시되었습니다.
Will

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
    

그런 다음 화면 공유 권한이 올바르게 프로비저닝되고 기본 데몬이 자동으로로드되지 않으며 런처가 사용자 정의 된 데몬을 강제로 시작합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.