我如何设置开放的 ssh 服务器,以便如果我从本地局域网进行 ssh,我希望它通过端口 22 进行,但如果我从外部进行 ssh,则希望它通过端口 12345 进行。
然后对于外部访问,我想在 sshd_config 中制定一些不同的(更严格)规则
答案1
艾瑞克·卡瓦略的答案适用于 15.04 之前的版本,但他们弃用了 Upstart,然后从 Ubuntu 中删除了它,SystemdForUpstartUsers。
这些步骤已适合与 systemd 配合使用。
复制 SSH 配置文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_external
复制 systemd 配置文件:
sudo cp /lib/systemd/system/ssh.service /lib/systemd/system/sshd-external.service
在新文件(
/lib/systemd/system/sshd-external.service
)中更改行:ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
到:
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS -f /etc/ssh/sshd_config_external
以及以下行:
Alias=sshd.service
到:
Alias=sshd-external.service
现在
/etc/ssh/sshd_config_external
根据您的需要进行定制(例如更改Port 22
为Port 12345
)启用服务
sudo ln -s /lib/systemd/system/ssh-external.service /etc/systemd/system/sshd-external.service
如果你已经运行了上述命令,则
sudo systemctl disable sshd-external.service
在运行下一个命令之前运行sudo systemctl enable sshd-external.service
sudo service sshd-external start
这已经在真实硬件上的 Ubuntu 16.04 和 virtualbox 中的虚拟机上进行了测试。
如果这不起作用,请告诉我。我有时会犯错。
答案2
创建另一个 SSH 服务实例。
复制 SSH 配置文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_external
复制 upstart 配置文件:
sudo cp /etc/init/ssh.conf /etc/init/ssh-external.conf
在新文件 (
ssh-external.conf
) 中,将以下行更改:mkdir -p -m0755 /var/run/sshd
到:
mkdir -p -m0755 /var/run/sshd-external
并改变这一行:
exec /usr/sbin/sshd -D
到:
exec /usr/sbin/sshd -D -f /etc/ssh/sshd_config_external
创建到 upstart 的链接:
sudo ln -s /lib/init/upstart-job /etc/init.d/ssh-external
现在/etc/ssh/sshd_config_external
根据您的需要进行定制(例如更改Port 22
为Port 12345
)并启动服务:
sudo service ssh-external start