我想更改sshd
Mac服务器上使用的端口。例如,假设从端口22到端口32。
编辑/etc/sshd_config
似乎无效。有人知道如何更改吗?我更喜欢一种与所有OSX版本兼容的方法(至少是兼容的)。
我想更改sshd
Mac服务器上使用的端口。例如,假设从端口22到端口32。
编辑/etc/sshd_config
似乎无效。有人知道如何更改吗?我更喜欢一种与所有OSX版本兼容的方法(至少是兼容的)。
Answers:
先前的每个答案都可以使用(正如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
或使用此链接找到带有更多信息的手册页。
如果希望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>
/System/Library/LaunchDaemons/ssh.plist
man launchd.plist
。
到目前为止,根据我的阅读(和经验),可以使用三种主要方法:
另一种执行此操作的方法,我个人迄今为止更喜欢所有这些方法,因为它避免了与Mac OS X系统文件混淆,因此使用socat将端口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
)使用正确的选项将端口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仅监听回送。
请享用。
/etc/services
文件不是一个好主意-它将影响SSH密钥登录到github或bitbucket帐户等操作,这将尝试连接到新端口并失败。
<key>KeepAlive</key><true/>
。
我在手册页的任何地方都看不到它的正确记录,但是如果您只想添加一个额外的侦听器,则可以使用一系列侦听器并附加一个字典。如果您直接使用端口,则不需要编辑/ 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>
man launchd.plist
。
/usr/libexec/sshd-keygen-wrapper
(如下文所示)可以启动与plist本身不同的SSH。如果您喜欢它,它总是会启动/usr/sbin/sshd
。