开机自动启动 SSH

开机自动启动 SSH

完全不熟悉 Linux 和 Ubnuntu。设置一台机器进行深度学习/神经网络。到目前为止一切顺利。一切都已安装并运行。我希望能够从我的 Mac 笔记本电脑通过 ssh 使用该系统。我安装了openssh并使其工作。

但是当我重新启动机器时,ssh 服务器没有重新启动。我检查了一下sudo service ssh status,它报告了一个错误。然后我可以启动它,一切正常。

我的第一个想法是我需要告诉它在重启时启动,然后我发现此主题它表示它应该默认启动,我不需要添加 chrontab 或类似的东西。所以我认为不是这样。

然后我发现此主题建议使用命令sudo update-rc.d ssh defaults,但是该线程已经很旧了,而且似乎当时的答案也可能不正确?

然后我发现此主题ListenAddress建议注释掉sshd_配置文件。基本上,它表示如果使用 ListenAddress,它可能会尝试在 DCHP 分配 IP 之前获取 IP,因此启动失败。这很有道理。但我需要该参数才能使我的端口转发在我的家庭网络上工作。

本文档监听地址

The default is to listen on all local addresses.

所以也许我不需要它来使端口转发工作?

我按照上一个帖子此错误报告它也相当老了,但建议每次 netmanager 获取新 IP 时使用网络管理器重新启动 ssh。

echo /etc/init.d/ssh restart > /etc/NetworkManager/dispatcher.d/10ssh
chmod 755 /etc/NetworkManager/dispatcher.d/10ssh

这比我这个菜鸟目前能评估的要多得多。这样安全吗?这样做对吗?过去 7 年里还有其他事情解决吗?

任何建议都很好。谢谢。

答案1

您是否尝试过简单地设置

sudo systemctl enable ssh

这就是我将 ssh 设置为在启动时运行的方法。

****我保留上面部分的答案,以便对其他看到这篇文章的人有帮助****

引用我上面的评论:

您是如何设置端口转发的?我根本不使用 ListenAddress,而我的家庭服务器上一切正常。我的路由器将通过我指定的端口(如果您想要标准端口,则为 22,但您可以使用任何端口,只要它不与国际网络上的其他服务冲突)进入的所有内容转发到我想要的计算机。例如,通过端口 12345 进入的所有内容都会转发到我的 CentOS 服务器上的端口 22。通过 12346 进入的所有内容都会转发到我的无头 RasPi 的端口 22。通过 12347 进入的所有内容都会转到 RasPi 上的 IRC 弹跳器的端口 6697

ListenAddress 与端口转发无关,ListenAdress 可用于配置了一个或多个 NIC 上的多个 IP 地址的服务器。引用自此处(整个页面都是一个很好的解释):https://www.cyberciti.biz/tips/howto-openssh-sshd-listen-multiple-ip-address.html

假设您总共有 8 个公网 IP 地址和一个私有 IP 地址。您只想将 sshd 绑定到一个选定的公网 IP(例如 70.5.xx.xx)和私有 IP(10.1.5.1)。

幸运的是,有一个简单的方法可以使用 ListenAddress 选项来实现这一点。它指定 sshd 应该监听的本地地址。如果从配置文件中跳过此指令,sshd 将绑定或列出所有可用的 IP 地址。

它允许您的多个 IP 中的一个接受 ssh 连接。我猜您将 ListenAddress 设置为您的公共 IP 或路由器的内部 IP - 我猜如果您将其设置为服务器的本地 IP,它就会正常工作。无论如何,现在您知道了 ListenAddress 的工作原理,并且如果您必须配置更复杂的服务器,您将做好准备。很高兴听到你让一切正常。

答案2

由于建议的解决方案对我来说不起作用,我最终发现需要额外的命令才能在启动时启动 SSH:

sudo update-rc.d ssh defaults
sudo systemctl enable ssh.socket

有人提到这个命令:

sudo systemctl enable ssh.service

应该执行以下命令:

sudo systemctl enable ssh

答案3

我知道这是一篇较旧的帖子,但我发现它试图解决 ssh 在重启后无法继续运行的类似问题。如果其他人偶然发现此帖子,也许这也会对他们有所帮助。我发现 ssh.socket 设置为在 ssh.service 之前启动,并且与 ssh.service 发生冲突。我将 ssh.socket 更改为在 ssh.service 之后启动,这似乎已经为我解决了这个问题。

曾是

vim /lib/systemd/system/ssh.socket

[Unit]
Description=OpenBSD Secure Shell server socket
Before=ssh.service
Conflicts=ssh.service

现在

vim /lib/systemd/system/ssh.socket

[Unit]
Description=OpenBSD Secure Shell server socket
After=ssh.service
Conflicts=ssh.service

答案4

我不得不禁用ssh.socket

sudo systemctl disable ssh.socket

然后启用ssh。

sudo systemctl enable ssh

相关内容