如何在 Mac OS X 上更改 sshd 端口?

如何在 Mac OS X 上更改 sshd 端口?

我想更改sshdMac 服务器上使用的端口。例如,从端口 22 更改为端口 32。

编辑/etc/sshd_config似乎不起作用。有人知道如何更改吗?我更喜欢一种与所有 OSX 版本兼容的方法(或至少与尽可能多的版本兼容)。

答案1

之前的所有答案都是有效的(谷歌也建议如此),但它们肮脏不雅

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

笔记:

为了能够编辑此文件酋长岩塞拉以及可能的未来版本,你需要禁用 SIP(系统完整性保护)。请参阅如何禁用系统完整性保护 (SIP)

  • 为了大苏尔稍后,此解决方案可能不再可行,因为/System/现在已密封并进行了校验。请参阅注释。

为了卡塔利娜,即使禁用 SIP,卷仍然不可写入。使用sudo mount -uw /以启用写入/System。进行更改,然后恢复 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可以通过输入或使用来找到包含更多信息的手册页此链接

答案2

如果您希望 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>

答案3

据我迄今所读(和所经历)的内容,有三种主要方法可供使用:

  1. 更改 ssh.plist 文件中的设置;
  2. 更改 /etc/services 文件中的设置;
  3. 更改 /etc/sshd.conf 文件中的设置。

另一种方法是使用 socat 将端口 22 重定向到您想要的任何端口,我个人非常喜欢这种方法,因为它可以避免弄乱 Mac OS X 系统文件。

  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. sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22通过发送 socat 调用( )使用正确的选项将端口 22(默认 ssh)重定向到您想要的任何端口(在下面的例子中为 2222)

您已完成,并且您的 mac os x 系统文件保持不变。此外,此方法不仅适用于 Snow Leopard,还适用于所有版本的 Mac OS X 以及可运行 socat 的任何机器。

如果您使用路由器/防火墙,您需要做的最后一件事是在路由器/防火墙中包含正确的重定向命令。

此外,它避免陷入 ssh.plist 方法、服务方法或其他方法是否比其他方法更好、更优雅或更差的争论。

您还可以轻松准备一个在启动时运行的脚本,以便在每次重新启动机器时重建 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 仅在环回上监听。

享受。

答案4

我在手册页中找不到任何关于此内容的正确记录,但如果您只想添加一个额外的侦听器,则可以使用侦听器数组并拥有一个额外的字典。如果您直接使用端口,则不需要编辑 /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>

相关内容