在启动时自动启动SSH


15

完全全新的Linux和Ubnuntu。设置机器以进行深度学习/神经网络。到目前为止,一切进展顺利。安装并运行了所有程序。我希望能够从Mac笔记本电脑上使用ssh来使用该系统。我安装了openssh并使其正常工作。

但是,当我重新启动计算机时,ssh服务器不会重新启动。我检查与sudo service ssh status它报告和错误。然后,我可以启动它,一切正常。

我的第一个念头是我需要告诉它重启后才能启动,我发现该线程表示默认情况下应该启动,并且不需要添加chrontab或类似的东西。所以我认为不是这样。

然后我发现了这个建议使用命令的sudo update-rc.d ssh defaults线程,但是那个线程已经很旧了,看来那个时候的答案也许还不对?

因此,然后我发现了该线程,它建议注释掉sshd_config文件中的ListenAddress行。基本上,它说如果使用了ListenAddress,它可能会尝试在DCHP分配IP之前获取IP,因此启动失败。有道理。但是我需要该参数来使我的端口转发在我的家庭网络上工作。

该文档ListenAddress条目下表示:

The default is to listen on all local addresses.

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

我遵循了此bug报告的上一个线程,线程也很旧,但是建议每次netmanager每次获得新IP时都使用网络管理器重新启动ssh。

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

这远远超出了这位noobie目前可以评估的范围。这样安全吗?这是做到这一点的方法吗?在过去的7年中,是否还制定了其他措施?

任何意见将是巨大的。谢谢。


e,我只安装了openssh-server软件包并正确配置了它。从那时起,我的ssh服务器每次都会自动正确启动。完全不需要任何额外的摆弄。
user535733

1
您是否正在使用端口转发,而无需使用ListenAddress参数?如果是这样,您能否分享“正确配置”的内容?
Rothrock

对于所有这些,您在首次启动时都没有提供有关SSH状态的任何信息。什么systemctl status ssh输出?
大师

您的问题听起来与此类似(显然未解决)SSH守护进程无法正常启动 -您可以编辑问题以包括systemctl status NetworkManager-wait-online.service
steeldriver

1
您如何进行端口转发设置?我根本不使用ListenAddress,并且在家用服务器上一切正常。我的路由器将我指定的端口(如果要使用标准端口,则为22,但只要它与国际网络上的其他服务不冲突,则可以使用任何东西)上的任何东西转发到我想要的计算机上。例如,端口12345上出现的所有内容都会转发到我的CentOS服务器上的端口22。12346上出现的所有内容都会转发到我无头的RasPi的端口22。12347上出现的所有内容都会进入RasPi上IRC保镖的端口6697。
RobertRSeattle '17

Answers:


43

您是否尝试过简单地设置

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地址和1个私有IP地址。您>要将sshd绑定到一个选定的公共IP(例如70.5.xx.xx)和专用IP>(10.1.5.1)。

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

这是为了允许您的多个IP之一接受ssh连接。我猜您将ListenAddress设置为公用IP或路由器的内部IP-我猜如果您将其设置为服务器的本地IP,则可以正常工作。无论如何,现在您知道了ListenAddress的工作原理,并且如果必须配置更复杂的服务器,您将准备就绪。很高兴听到您的工作正常。


2
+1这是正确的答案。Ubuntu 16.04开始使用systemd。此答案中的命令使用systemd在重新启动时启动SSH。OP链接的其他线程仅适用于新贵,而不适用于系统线程或根本不适用于他们的问题。
山姆·格莱斯科

1
我做了systemctl list-unit-files –type = service,我看到启用了ssh.service。所以我认为这不是问题。但是,感谢您提供有关systemctl / systemd的提示。那给了我更多看的地方。有没有办法告诉systemd / systemctl等待DCHP返回IP地址?
Rothrock

启用后,应创建一个新文件,并与ls -l /etc/systemd/system/sshd.service
Timo '18

2

由于建议的解决方案对我不起作用,因此我最终发现需要其他命令以在引导时启动SSH:

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

有人提到此命令:

sudo systemctl enable ssh.service

应该执行而不是执行以下命令:

sudo systemctl enable ssh

Ubuntu 18,没有工作。需要我从GUI登录才能从另一台计算机ssh登录。
深度调试
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.