web-dev-qa-db-ja.com

Mac OS XでSSHポートを変更するにはどうすればよいですか?

Macサーバーでsshdが使用するポートを変更したい。たとえば、ポート22からポート32までを考えてみましょう。

編集/etc/sshd_configが機能していないようです。誰かがそれを変更する方法を知っていますか?私は、すべてのOSXバージョンと互換性のある(または少なくともできるだけ多くの)メソッドを好みます。

54

以前のすべての答えは機能していますが(Googleも推奨)、dirty and inelegantです。

Mac OS Xでlaunchdで処理されるサービスのリスニングポートを変更する正しい方法は、ssh.plistで使用可能な専用キーを変更することです

したがって、ソリューションはサービス名の代わりにポート番号を使用するのと同じくらい簡単です。

私が編集した/System/Library/LaunchDaemons/ssh.plistからの抜粋:

    <key>Sockets</key>
    <dict>
            <key>Listeners</key>
            <dict>
                    <key>SockServiceName</key>
                    <string>22022</string>
                    <key>SockFamily</key>
                    <string>IPv4</string>
                    <key>Bonjour</key>
                    <array>
                            <string>22022</string>
                    </array>
            </dict>
    </dict>

注:El Capitan、Sierra、およびおそらく将来のバージョンでもこのファイルを編集できるようにするには、SIP(システム整合性保護) システム整合性保護(SIP)[...])を無効にする方法を参照 を参照してください。

上記の編集は、sshdがIPV4でのみリッスンするように強制します。

ssh.plistに変更を加えた後、ファイルを次のようにリロードする必要があります。

Sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
Sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

launchctl stop ...およびlaunchctl start ...を使用しても、このファイルは再ロードされません。

man launchd.plistと入力するか、 このリンク を使用すると、詳細情報が記載されたマニュアルページが見つかります。

62
drAlberT

Sshdが追加のポートでリッスンするようにしたい場合は、ソケットディクショナリに複数のエントリを追加できます。

例:

<key>Sockets</key>
<dict>
        <key>Listeners</key>
        <dict>
                <key>SockServiceName</key>
                <string>ssh</string>
                <key>Bonjour</key>
                <array>
                        <string>ssh</string>
                        <string>sftp-ssh</string>
                </array>
        </dict>
        <key>Listeners2</key>
        <dict>
                <key>SockServiceName</key>
                <string>22022</string>
        </dict>
</dict>
17
raimue

これまでに読んだ(そして経験した)ものから、使用できる主な方法は3つあります。

  1. ssh.plistファイルの設定を変更します。
  2. / etc/servicesファイルの設定を変更します。
  3. /etc/sshd.confファイルの設定を変更します。

これを行う別の方法は、Mac OS Xのシステムファイルをいじるのを回避するため、個人的にこれらの方法よりもはるかに優先されます。これはsocatを使用して、ポート22を目的のポートにリダイレクトすることです。

  1. Socatをダウンロード: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Tar.gzファイルを/ usr/local /ディレクトリ(Sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz
  3. / usr/local/binディレクトリ(cd /usr/local/bin
  4. 解凍:Sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. 圧縮されていないファイルディレクトリに移動します:cd ./socat-1.7.3.2
  6. 通常のconfigure、make、make installを実行してsocat(Sudo ./configure && Sudo make && Sudo make install
  7. Socat呼び出し(Sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22

完了し、Mac OS Xシステムファイルは変更されません。さらに、この方法はSnow Leopardだけでなく、Mac OS Xのすべてのバージョンとsocatを実行できるすべてのマシンで機能します。

ルーター/ファイアウォールを使用する場合、最後に行う必要があるのは、ルーター/ファイアウォールに正しいリダイレクトコマンドを含めることです。

また、ssh.plistメソッド、servicesメソッド、その他のメソッドのどちらが優れているか、よりエレガントであるか、または他のメソッドより悪いかという議論に巻き込まれるのを回避します。

起動時に実行するスクリプトを簡単に準備して、マシンを再起動するたびにsocatリダイレクトを再構築することもできます。これを/Library/LaunchDaemons/com.serverfault.sshdredirect.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.serverfault.sshdredirect</string>
    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/socat</string>
        <string>TCP-LISTEN:2222,reuseaddr,fork</string>
        <string>TCP:localhost:22</string>
    </array>
</dict>
</plist>

使用する Sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistでロードします。今後の再起動時に自動的に読み込まれます。

さらに、(i)ループバック(127.0.0.1)以外のインターフェースからポート22への接続をブロックするようにファイアウォールを設定し、(ii)sshd.confファイルに同様の変更を加えることで、セキュリティを向上させることもできます。 sshにループバックのみをリッスンさせます。

楽しい。

6
Cedric

このドキュメントはマニュアルページのどこにも適切に記載されていませんが、リスナーを追加するだけの場合は、リスナーの配列を使用して、辞書を追加できます。ポートを直接使用する場合、/ etc/servicesを編集する必要はありません(ただし、ファイアウォールでポートを開くことを忘れないでください!)

    <key>Listeners</key>
    <array>
    <dict>
        <key>Bonjour</key>
        <array>
            <string>ssh</string>
            <string>sftp-ssh</string>
        </array>
        <key>SockServiceName</key>
        <string>ssh</string>
    </dict>
    <dict>
        <key>SockServiceName</key>
        <string>22222</string>
    </dict>
    </array>
1
Adam Prescott