it-swarm.cn

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

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

编辑/etc/sshd_config似乎无效。有人知道如何更改吗?我更喜欢一种与所有OSX版本兼容的方法(至少是兼容的)。

54
Alexander Artemenko

每个以前的答案都可以使用(正如Google所建议的那样),但是它们很脏肮脏而优雅

更改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(系统完整性保护)。请参阅- 如何禁用系统完整性保护(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或使用 此链接 找到手册页。

62
drAlberT

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

到目前为止,根据我的阅读(和经验),可以使用三种主要方法:

  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方法,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仅监听回送。

请享用。

6
Cedric

我在手册页中的任何地方都看不到任何文档,但是如果您只想添加一个额外的侦听器,则可以使用一系列侦听器并附带一个额外的字典。如果您直接使用端口,则不需要编辑/ 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
Adam Prescott