无法更改 macOS X Mojave 上内置 SSH 的 PORT 监听

无法更改 macOS X Mojave 上内置 SSH 的 PORT 监听

macOS X Mojave 10.14.2,内核 Darwin 18.2.0
出于安全原因,想要进一步更改 2222x 中用于监听传入 SSH 连接的 22 端口。
更改 /etc/ssh/sshd_config 毫无意义。
之前描述的方法在 Mojave 上对我来说不起作用有
什么建议我可以在哪里更改端口设置?

在 /etc/ssh/sshd_config 中:

#       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# SSH v2
Protocol 2
Port 2222
AddressFamily inet
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

客户端的 /etc/ssh/ssh_config:

 Host *
        Protocol 2
        Port 2222
        SendEnv LANG LC_*

sshd 上监听的端口:

MBP:.ssh user$ > sudo lsof -iTCP -sTCP:LISTEN -n -P
    COMMAND     PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
    launchd       1   root    8u  IPv6 0xad7e82fd153731a7      0t0  TCP *:445 (LISTEN)
    launchd       1   root   12u  IPv4 0xad7e82fd153798e7      0t0  TCP *:445 (LISTEN)
    launchd       1   root   14u  IPv6 0xad7e82fd22020067      0t0  TCP *:22 (LISTEN)
    launchd       1   root   20u  IPv4 0xad7e82fd2eeb3f67      0t0  TCP *:22 (LISTEN)
    launchd       1   root   24u  IPv6 0xad7e82fd153731a7      0t0  TCP *:445 (LISTEN)
    launchd       1   root   26u  IPv6 0xad7e82fd15373767      0t0  TCP *:548 (LISTEN)
    launchd       1   root   28u  IPv4 0xad7e82fd153798e7      0t0  TCP *:445 (LISTEN)
    launchd       1   root   29u  IPv6 0xad7e82fd22020067      0t0  TCP *:22 (LISTEN)
    launchd       1   root   33u  IPv4 0xad7e82fd15378f67      0t0  TCP *:548 (LISTEN)
    launchd       1   root   43u  IPv6 0xad7e82fd15373767      0t0  TCP *:548 (LISTEN)
    launchd       1   root   44u  IPv4 0xad7e82fd15378f67      0t0  TCP *:548 (LISTEN)
    launchd       1   root   47u  IPv4 0xad7e82fd2eeb3f67      0t0  TCP *:22 (LISTEN)
    kdc          87   root    5u  IPv6 0xad7e82fd15372be7      0t0  TCP *:88 (LISTEN)
    kdc          87   root    7u  IPv4 0xad7e82fd15377c67      0t0  TCP *:88 (LISTEN)

答案1

假设你想将默认端口 22 更改为端口 22222

打开终端窗口

编辑/etc/services文件输入: sudo vi /etc/services
系统将提示您输入密码并获得提升的安全权限以进行更改。

使用斜线命令查找 ssh 服务/ssh。将有两个条目,一个用于tcp,另一个用于udp

ssh 22/udp # SSH 远程登录协议
ssh 22/tcp # SSH 远程登录协议

将两种情况下的数字 22 更改为 22222 或您想要的端口号。

使用保存更改:wEnter

你需要回收远程控制守护进程。根据您的系统设置,远程控制可能没有运行。如果没有,第一个命令将失败;忽略它并继续执行第二个命令以启动远程控制

输入以下命令来停止它:
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist

现在输入以下命令再次启动 SSH:
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

使用以下命令通过 ssh 登录来验证您是否可以访问系统:
ssh localhost -p 22222

要恢复系统,请重做上述步骤并将 ssh 端口改回 22。

答案2

监听端口 22 由 负责launchd,它相当于 Unix 的initinetd并且cronInetd可以配置为监听某个端口并启动相应的命令,而不是以守护进程模式启动该命令,与 相同launchd

您会注意到,如果您运行一个,ps -ax | grep sshd它们都没有监听端口 22。您还会注意到,如果您lsoflaunchd进程上运行一个,您会看到它正在监听端口 22。

launchd是通过和操作系统一起安装的系统目录中的一堆.plist文件进行的配置,非系统是在安装后添加的。/Library/LaunchDaemons/System/Library/LaunchDaemons

您需要的配置是/System/Library/LaunchDaemons/ssh.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <true/>
        <key>Label</key>
        <string>com.openssh.sshd</string>
        <key>Program</key>
        <string>/usr/libexec/sshd-keygen-wrapper</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/sbin/sshd</string>
                <string>-i</string>
        </array>
        <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>
        </dict>
        <key>inetdCompatibility</key>
        <dict>
                <key>Wait</key>
                <false/>
                <key>Instances</key>
                <integer>42</integer>
        </dict>
        <key>StandardErrorPath</key>
        <string>/dev/null</string>
        <key>SHAuthorizationRight</key>
        <string>system.preferences</string>
        <key>POSIXSpawnType</key>
        <string>Interactive</string>
</dict>
</plist>

如果您不想让它再监听端口 22,您可以编辑此文件。否则,请将其以不同的名称复制/Libary/LaunchDaemons并编辑该副本。cp /System/Library/LaunchDaemons/ssh.plist /Library/LaunchDaemons/ssh-alt.plist

编辑正下方的行,SockServiceName它是端口号或端口别名的字符串,因此更改/etc/services有效。您可以将所需的数字端口添加到 plist 中的数组,也可以使用自己的标识符将所需的数字端口添加到 /etc/services,就像my-ssh-alt在 plist 中更改为它一样。

如果已复制到新的 plist,请加载新的 plist;

sudo launchctl load -w /Library/LaunchDaemons/ssh-alt.plist

否则重新加载 ssh 配置,我将从其他答案中复制该配置;

输入以下命令来停止它: sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist

现在输入以下命令再次启动 SSH: sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

答案3

为了跟进 Hogstrom 的回应,你可能还需要编辑 /etc/ssh/ssh_config 并取消注释以下内容:

端口 22

因此,当您尝试 ssh 到所选的普通主机(运行端口 22)而不是您在 /etc/services 中设置的新 ssh 默认值时。

答案4

为了补充 silicontrip 的答案,如果您想要原始端口和新端口,您可以在 ssh.plist 的 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>Alternate Listeners</key>
     <dict>
         <key>SockServiceName</key>
         <string>(name of service)</string>
     </dict>
</dict>
...

请注意,在蒙特雷,ProgramArguments 部分自 Big Sur 以来发生了变化(它过去直接调用 sshd)。如果您刚刚将 ssh.plist 文件从 Big Sur 复制到蒙特雷,则会导致“kex_exchange_identification:读取:对等方重置连接”。

<key>ProgramArguments</key>
<array>
      <string>sshd-keygen-wrapper</string>
</array>

我修改 /System/Library/LaunchDaemons/ssh.plist 的问题是我不想破坏卷上的 apfs 密封。

我在 /Library/LaunchDaemons/ssh_alt.plist 中使用不同的标签创建了 ssh.plist 的副本,并使用

sudo launchctl load -w /Library/LaunchDaemons/ssh_alt.plist

到目前为止,这种现象似乎仍在靴子中持续存在。

相关内容