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

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

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

以前的每一个答案都是有效的(正如Google的build议一样),但是它们又脏又不雅

在Mac OS X上更改启动处理服务的侦听端口的正确方法是使更改成为ssh.plist的专用密钥

所以解决scheme就像使用端口号而不是服务名一样简单。

摘自我编辑过的/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进行任何更改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或使用此链接来查找包含更多信息的手册页。

如果您希望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. 改变ssh.plist文件中的设置;
  2. 更改/ etc / services文件中的设置;
  3. 更改/etc/sshd.conf文件中的设置。

另一种方法来做到这一点,我个人更喜欢所有这些方法,因为它避免了Mac OS X系统文件的混乱使用socatredirect端口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:22sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22将端口22(默认ssh)redirect到你想要的任何端口(在以下例2222中)

你完成了,你的Mac OS X系统文件保持不变。 另外,这种方法不仅适用于Snow Leopard,而且适用于所有版本的Mac OS X,也适用于任何可以运行socat的机器。

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

而且,它避免陷入ssh.plist方法,服务方法或任何方法比另一方更好,更优雅或更差的争论之中。

您也可以轻松地准备一个在启动时运行的脚本,以便在重新启动机器时重buildsocatredirect。 把它放在/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监听回环。

请享用。

我看不到在手册页的任何地方logging下来,但如果你只想添加一个额外的监听器,你可以使用一个监听器数组,并有一个额外的字典。 如果您直接使用端口,则不需要编辑/ 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>