完全不熟悉 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