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


53

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

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


还要注意/usr/libexec/sshd-keygen-wrapper(如下文所示)可以启动与plist本身不同的SSH。如果您喜欢它,它总是会启动/usr/sbin/sshd

Answers:


61

先前的每个答案都可以使用(正如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或使用此链接找到带有更多信息的手册页。


3
@Yar launchd.plist是手册的名称。更改位于/ System / Library / LaunchDaemons
Martijn Pieters

1
我注意到您需要重新启动计算机,或通过launchctl重新启动ssh服务。
Danny Staple

5
糟糕... OS X的每次升级(在本例中为Yosemite)都放弃了此更改,要求我记住上次修复该错误的操作以及在何处找到此信息。感谢您的修复!
迈克尔

2
@Hassan,您必须启动两个ssh实例..即添加另一个具有不同SockServiceName名称和值的侦听器
drAlberT 2015年

5
请注意,在El Capitan版本(以及可能在以后的版本中)上,您需要先禁用SIP(系统完整性保护),然后才能编辑文件,请参阅:apple.stackexchange.com/a/208481
jcfrei

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>

1
为了清楚起见,@ Raim指的是:/System/Library/LaunchDaemons/ssh.plist
Mike Causer 2013年

Bonjour钥匙的用途是什么?

我也想知道,Bonjour钥匙的目的是什么?
德鲁

到底是什么20022?
Jamie Hutber

1
Bonjour密钥的用途:此可选密钥可用于请求向Bonjour子系统注册服务。据告诉man launchd.plist
斯科特·威勒克

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)使用正确的选项将端口22(默认ssh)重定向到所需的任何端口(在以下示例中,为2222 )

完成后,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仅监听回送。

请享用。


2
编辑/etc/services文件不是一个好主意-它将影响SSH密钥登录到github或bitbucket帐户等操作,这将尝试连接到新端口并失败。
ccpizza 2014年

1
您应该在暂存目录中构建。然后使用sudo安装。您不应使用提升的特权进行构建。

这也适用于El Capitan,因为SIP使得更改/System/Library/LaunchDaemons/ssh.plist变得困难。但是,在El Capitan上,“ NetworkState”键已被弃用;我建议<key>KeepAlive</key><true/>
罗伯特·图珀洛-施内克

与最新的OSX山脉,工作版本是:gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
杉木河

1

我在手册页的任何地方都看不到它的正确记录,但是如果您只想添加一个额外的侦听器,则可以使用一系列侦听器并附加一个字典。如果您直接使用端口,则不需要编辑/ 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
Bonjour钥匙的用途是什么?

@jww我认为这是我与其他听众一起粘贴时出现的复制粘贴错误。
亚当·普雷斯科特

我也想知道,Bonjour钥匙的目的是什么?
提请

1
Bonjour密钥的用途:此可选密钥可用于请求向Bonjour子系统注册服务。据告诉man launchd.plist
斯科特·威勒克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.