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より前のシステムには存在しません)。

ファイルを編集するには、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

あなたがまだそこにいる場合-これを行ったら、組み込みのMac画面共有アプリをそのポートに接続するための同等の方法がありますか、それとも指定できるサードパーティのvncアプリを使い続けていますか?港?
ジム・ミラー

2
上記の回答:「サーバーに接続...」で、vnc://yourserver.com:54321を指定します(前の例のポート番号の後に続きます)
Jim Miller

これが機能する場合(私は今夜まで確認できません)、さらに多くの賛成票を投じる価値があります。
PaulSkinner 2013年

1
確認するには、はい、OSを更新するたびに(増分更新を含む)、これを行う必要があります。
PaulSkinner 2013年

1
これにもう1つ注意を加えると、OS X 10.11 El Capitanの新しい「ルートレス」機能により、ルートレス機能を無効にしない限りこの特定のファイルを保存することはできなくなります。これは推奨されません。ルートレスを無効にせずに回避策を知っている人はいますか?
PaulSkinner、2015年

5

Googleでこのスレッドを見つけた後/etc/services、「rfb」ポートを編集すると、含まれているVNCサーバーのリスニングポートが変更されることを確認できます。

ファイルを編集して再起動しました(通常、サービスを再起動するか、launchdeamonをアンロードしようとしましたが、他にもいくつか問題があり、気にしませんでした)。iPadのiTeleportは5900に接続できず、選択した高い非特権ポートで成功しました。


この答え、El Capitan 10.11で使用する解決策になる可能性があります。
PaulSkinner、2015年

確認すると、これはおそらくルートレス無効にすることなく、El Capitan 10.11のおそらく最良のソリューションです。
PaulSkinner、2015年

これはファイル共有(smb)でも機能しました!「Microsoft-DS」のポートを変更しました
Wowfunhappy

@PaulSkinner rootlessは/ etc内のすべてを保護しませんか?(私はそれを無効にしているので、私にはわかりません)
Wowfunhappy

@Wowfunhappy驚くべきことに、違います。
PaulSkinner 2017

3

これはで様々なフォーラムで議論されてきたapple.comと上macosxhints.com。簡単に言えば、「変更することはできません」です。

より長い答えはそれを回避する方法を示唆しています-3つの可能性:

  • 別のVNCサーバーソフトウェアを使用する
  • sshトンネルを使用してカスタムポートから5900にトラフィックをリダイレクトする
  • ルーターのポートマッピングを構成して、別のポートの着信トラフィックをMacのポート5900に移動します。

完全を期すためだけに:ポートを変更することで/etc/Servicesうまくいくかもしれないと示唆する人もいます。私はそれを試しました(変更した後でMacを再起動しました)。さらに考えてみると、他のアプリケーションも特定のプロトコルを使用してサードパーティに接続したい場合に、既知のポート番号を取得するためにそれを使用する可能性があるため、そのファイルをいじるのは悪い考えかもしれません。(同様に、そのファイルのSSHポートを変更することは機能するように見えるかもしれませんが、悪い考えです。)
Arjan

1
Greg Cantyの回答に注意してください-Snow Leopard以降のOS Xリリースでは変更できます。この回答は、もともとOS X Lionがリリースされる前に書かれたものです。
Doug Harris

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 2015

そのMureinikについて申し訳ありません。リンクの代わりに投稿されたコード。
2015

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.