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

Ale*_*nko 57 ssh mac-osx-server mac-osx

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

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

drA*_*erT 66

以前的每个答案都有效(正如谷歌建议的那样),但它们又脏又不雅

在 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>
Run Code Online (Sandbox Code Playgroud)

笔记:

为了能够在El CapitanSierra以及可能的未来版本上编辑此文件,您需要禁用 SIP(系统完整性保护)。请参阅如何禁用系统完整性保护 (SIP)

对于Catalina,即使在禁用 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
Run Code Online (Sandbox Code Playgroud)

请注意,使用launchctl stop ...launchctl start ...不会重新加载此文件。

可以通过键入man launchd.plist或使用此链接找到包含更多信息的手册页。

  • Grr... OS X 的每次升级(在本例中为 Yosemite)都会丢弃此更改,要求我记住我上次修复它时做了什么,以及我在哪里找到了这些信息。感谢您的修复! (5认同)
  • 请注意,在 El Capitan 版本(也可能在未来版本中)上,您需要先禁用 SIP(​​系统完整性保护),然后才能编辑文件,请参阅:http://apple.stackexchange.com/a/208481 (5认同)
  • @Yar launchd.plist 是手册的名称。更改位于 /System/Library/LaunchDaemons 中的 ssh.plist 文件中 (3认同)
  • @Hassan 您必须启动两个 ssh 实例.. 即添加另一个具有不同 SockServiceName 名称和值的侦听器 (2认同)

rai*_*mue 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>
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,@Raim 指的是:`/System/Library/LaunchDaemons/ssh.plist` (2认同)
  • Bonjour 密钥的用途:_此可选密钥可用于请求向 Bonjour 子系统注册服务。_ 正如“man launchd.plist”所述。 (2认同)

小智 6

从我目前阅读(和经历)的内容来看,可以使用三种主要方法:

  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 方法、服务方法或任何方法是否比另一个更好、更优雅或更差的争论中。

您还可以轻松准备一个在启动时运行的脚本,以在每次重新启动机器时重建 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>
Run Code Online (Sandbox Code Playgroud)

使用sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plist加载它。它将在未来重新启动时自动加载。

此外,您还可以通过 (i) 将防火墙设置为阻止从环回 (127.0.0.1) 以外的任何其他接口到您的端口 22 的任何连接以及 (ii) 在您的 sshd.conf 文件中进行类似的更改来提高安全性让 ssh 只在环回上监听。

享受。

  • 编辑 `/etc/services` 文件是一个坏主意 - 它会影响诸如 SSH 密钥登录到您的 github 或 bitbucket 帐户之类的事情,这将寻求连接到新端口并失败。 (3认同)