我想更改sshd
Mac 服务器上使用的端口。例如,从端口 22 更改为端口 32。
编辑/etc/sshd_config
似乎不起作用。有人知道如何更改吗?我更喜欢一种与所有 OSX 版本兼容的方法(或至少与尽可能多的版本兼容)。
答案1
之前的所有答案都是有效的(谷歌也建议如此),但它们肮脏不雅。
在 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>
笔记:
为了能够编辑此文件酋长岩,塞拉以及可能的未来版本,你需要禁用 SIP(系统完整性保护)。请参阅如何禁用系统完整性保护 (SIP)。
- 为了大苏尔稍后,此解决方案可能不再可行,因为
/System/
现在已密封并进行了校验。请参阅注释。
为了卡塔利娜,即使禁用 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
请注意,使用launchctl stop ...
和launchctl start ...
不会重新加载此文件。
man launchd.plist
可以通过输入或使用来找到包含更多信息的手册页此链接。
答案2
如果您希望 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>
答案3
据我迄今所读(和所经历)的内容,有三种主要方法可供使用:
- 更改 ssh.plist 文件中的设置;
- 更改 /etc/services 文件中的设置;
- 更改 /etc/sshd.conf 文件中的设置。
另一种方法是使用 socat 将端口 22 重定向到您想要的任何端口,我个人非常喜欢这种方法,因为它可以避免弄乱 Mac OS X 系统文件。
- 下载socat:http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
- 将 tar.gz 文件移动到 /usr/local/ 目录(
sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz
) - 转到 /usr/local/bin 目录(
cd /usr/local/bin
) - 解压缩:
sudo tar -xvzf socat-1.7.3.2.tar.gz
- 移动到未压缩的文件目录:
cd ./socat-1.7.3.2
- 运行常用的 configure、make 和 make install 来安装 socat(
sudo ./configure && sudo make && sudo make install
) sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22
通过发送 socat 调用( )使用正确的选项将端口 22(默认 ssh)重定向到您想要的任何端口(在下面的例子中为 2222)
您已完成,并且您的 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>
用来sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plist
加载它。它将在下次重启时自动加载。
此外,您还可以通过以下方式提高安全性:(i)设置防火墙以阻止从环回(127.0.0.1)以外的任何其他接口到端口 22 的任何连接;(ii)在 sshd.conf 文件中进行类似的更改,使 ssh 仅在环回上监听。
享受。
答案4
我在手册页中找不到任何关于此内容的正确记录,但如果您只想添加一个额外的侦听器,则可以使用侦听器数组并拥有一个额外的字典。如果您直接使用端口,则不需要编辑 /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>