Ubuntu Server断电/重启后需本地登录才能远程SSH及启动服务的解决方法咨询
Ubuntu Server断电/重启后需本地登录才能远程SSH及启动服务的解决方法咨询
兄弟,先把你的问题捋清楚:你搭了一台Ubuntu Server,端口转发都配置好了,平时能正常远程访问,但只要断电重启,就必须本地手动登录之后,SSH和其他服务(比如web服务器、语音聊天服务器)才能正常工作。你现在想解决不用本地登录就能远程SSH的问题,而且目前只用普通用户名密码登录,没搞SSH密钥那套复杂的东西。
你提到打算用getty自动登录一个无权限用户,然后通过这个方式实现远程访问,还担心这个方案会不会有严重问题,我来给你分析下:
先说说这个方案的可行性与风险
这个方案不是完全不能用,但确实有几个需要注意的点,你得结合自己的情况权衡:
- 权限一定要锁死:
- 确保这个自动登录的用户没有sudo权限,甚至可以把它的shell改成
/usr/sbin/nologin或者/bin/false(不过要注意,如果你需要通过这个用户做什么操作,可能得调整,但你说要禁止它远程登录,所以shell改成不可登录的更安全)。 - 在
/etc/ssh/sshd_config里把这个用户加入DenyUsers列表,这样外部根本没法通过SSH登录这个用户,只有本地自动登录的会话。 - 把这个用户的家目录权限设置成只有自己可读,禁止其他用户访问,也不要给它写入系统文件的权限。
- 确保这个自动登录的用户没有sudo权限,甚至可以把它的shell改成
- 物理安全是关键:你说服务器在私人场地,被人物理接触的概率低,那这个方案的风险就小很多。但如果有人能摸到服务器,因为已经自动登录了一个用户,哪怕权限低,也能在本地查看一些系统日志、公开配置文件,要是权限没做好甚至可能被提权。不过物理安全有保障的话,这个风险基本可以忽略。
更推荐的根本解决思路
其实你遇到的核心问题,大概率是服务的启动级别不对:你的SSH或者其他服务被设置成了「用户会话级启动」,而不是「系统级启动」。正常来说,服务器上的服务应该是系统启动后就自动运行,不需要等用户登录的。
你可以按下面的步骤排查修复:
- 检查SSH服务的自启状态:
远程能连上的时候,执行命令:
如果输出不是systemctl is-enabled sshdenabled,就执行:
这样SSH服务就会开机自动启动,不用等任何用户登录。sudo systemctl enable sshd - 检查其他服务的启动配置:
比如你的web服务器(nginx/apache)、语音聊天服务器,执行:
看服务的「Loaded」部分是不是显示systemctl status 你的服务名enabled,再看服务的unit文件里的WantedBy字段是不是multi-user.target(可以用systemctl cat 你的服务名查看)。如果是用户级启动(比如WantedBy=default.target),就改成系统级自启:sudo systemctl enable 你的服务名
总结
- 优先推荐修复服务的自启配置,让SSH和其他服务变成系统级开机自启,这才是服务器的标准操作,从根源上解决问题,没有额外风险。
- 如果因为某些特殊原因必须用自动登录的方案,只要严格做好权限控制和物理安全,这个方案算不上「horrible idea」,只是属于次优解。
备注:内容来源于stack exchange,提问作者axel_axel_




