Mac OS Xでsshdポートを変更するには?


53

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

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


/usr/libexec/sshd-keygen-wrapper(下記のリストに示されている)plist自体で指定されているものとは異なるSSHを開始できることにも注意してください。猫を飼うと、常に始まり/usr/sbin/sshdます。

回答:


61

以前のすべての答えは機能していますが(グーグルが示唆しているように)、それらは汚れていて洗練されていません。

Mac OS Xで起動された処理済みサービスのリッスンポートを変更する正しい方法は、専用キーを変更できるようにすることです。 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(System Integrity Protection)を無効にする必要があります。システム整合性保護(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か使用すると、詳細情報が記載されたmanページを見つけることができます。


3
@Yar launchd.plistはマニュアルの名前です。変更は、/システム/ライブラリ/ LaunchDaemonsでssh.plistファイルにある
マルタインピータース

1
マシンを再起動するか、launchctlでsshサービスを再起動する必要があることに注意してください。
ダニーステープル

5
Grr ... OS X(この場合はYosemite)のアップグレードごとにこの変更が破棄されるため、最後に修正するために何をしたか、この情報をどこで見つけたかを覚えておく必要があります。修正してくれてありがとう!
マイケル14年

2
@Hassanは、2つのsshインスタンスを起動する必要があります。つまり、異なるSockServiceNameの名前と値を持つ別のリスナーを追加します
drAlberT

5
El Capitanバージョン(おそらく将来のバージョンでも)では、ファイルを編集する前にSIP(System Integrity Protection)を無効にする必要があることに注意して
a

17

sshdが追加のポートでリッスンするようにする場合は、Sockets辞書に複数のエントリを追加できます。

例:

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

1
:明確にするために、@Raimはを参照している/System/Library/LaunchDaemons/ssh.plist
マイク・コーサー

Bonjourキーの目的は何ですか?

私も知りたいのですが、Bonjourキーの目的は何ですか?
ドリュー

20022とは一体何ですか?
ジェイミーハッバー

1
Bonjourキーの目的:このオプションのキーを使用して、サービスをBonjourサブシステムに登録するように要求できます。によるとman launchd.plist
スコットウィレケ

6

これまでに読んだ(そして経験した)ことから、使用できる主な方法は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)を送信することにより、正しいオプションを使用して、ポート22(デフォルトssh)を任意のポート(次の例では2222)にリダイレクトします。

以上で、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がループバックのみでリッスンするようにします。

楽しい。


2
/etc/servicesファイルの編集は悪い考えです-githubまたはbitbucketアカウントへのSSHキーログインなどに影響し、新しいポートへの接続を試みて失敗します。
ccpizza

1
スクラッチディレクトリにビルドする必要があります。次に、を使用sudoしてインストールします。昇格した特権でビルドしないでください。

これは、SIPが/System/Library/LaunchDaemons/ssh.plistの変更を困難にするEl Capitanでも機能します。しかし、エルキャピタンでは、「NetworkState」キーは非推奨です。をお勧めし<key>KeepAlive</key><true/>ます。
RTS-モニカセリオについて

最新のOSXシエラ、作業バージョンである:gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu

1

これはマニュアルページのどこにもきちんと文書化されていませんでしたが、リスナーを追加する以外に何もしたくない場合は、リスナーの配列を使用して辞書を追加できます。ポートを直接使用する場合は、/ 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
Bonjourキーの目的は何ですか?

@jwwこれは、他のリスナーからこれをつなぎ合わせていたときのコピーアンドペーストエラーだと思います。
アダムプレスコット

私も知りたいのですが、Bonjourキーの目的は何ですか?
ドリュー

1
Bonjourキーの目的:このオプションのキーを使用して、サービスをBonjourサブシステムに登録するように要求できます。によるとman launchd.plist
スコットウィレケ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.