我想更改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>
从我读到(和经验)到目前为止,有三种主要的方法可以使用:
另一种方法来做到这一点,我个人更喜欢所有这些方法,因为它避免了Mac OS X系统文件的混乱使用socatredirect端口22到任何你想要的端口。
sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz
) cd /usr/local/bin
) sudo tar -xvzf socat-1.7.3.2.tar.gz
cd ./socat-1.7.3.2
sudo ./configure && sudo make && sudo make install
) sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22
) sudo 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>