Macサーバーでsshd
が使用するポートを変更したい。たとえば、ポート22からポート32までを考えてみましょう。
編集/etc/sshd_config
が機能していないようです。誰かがそれを変更する方法を知っていますか?私は、すべてのOSXバージョンと互換性のある(または少なくともできるだけ多くの)メソッドを好みます。
以前のすべての答えは機能していますが(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
と入力するか、 このリンク を使用すると、詳細情報が記載されたマニュアルページが見つかります。
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>
これまでに読んだ(そして経験した)ものから、使用できる主な方法は3つあります。
これを行う別の方法は、Mac OS Xのシステムファイルをいじるのを回避するため、個人的にこれらの方法よりもはるかに優先されます。これはsocatを使用して、ポート22を目的のポートにリダイレクトすることです。
Sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz
)cd /usr/local/bin
)Sudo tar -xvzf socat-1.7.3.2.tar.gz
cd ./socat-1.7.3.2
Sudo ./configure && Sudo make && Sudo make install
)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にループバックのみをリッスンさせます。
楽しい。
このドキュメントはマニュアルページのどこにも適切に記載されていませんが、リスナーを追加するだけの場合は、リスナーの配列を使用して、辞書を追加できます。ポートを直接使用する場合、/ 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>