8

哎呀,服务器登录不进去了瞎折腾

 3 years ago
source link: https://segmentfault.com/a/1190000039992700
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

哎呀,服务器登录不进去了瞎折腾

副标题:记录一次服务器重启应用恢复过程

梳理服务器错误操作的整个过程,算是自己的一次复盘 ✍️

本文可以了解到:

  1. ssh 免密登录服务器简单配置
  2. sshd 端口查看和修改
  3. Elixir + Phoenix 服务线上操作
  4. 如何查看 Linux 的开机启动项(服务器重启后,哪些服务会自动重启)
  5. systemctl 简介

本来自己云服务器上的应用一直跑的很稳定,也好长时间没打理了。最近收到腾讯云的安全提示,说服务器有高危漏洞 🕷,需要处理一下。

因为应用太过稳定(访问量很小 🤷🏻‍♀️)好久没登录服务器了,先本地终端 ssh 连接服务器,发现被拒绝了。然后我又尝试从腾讯云的网页使用 ssh 标准方式登录也被拒绝了 🐣。

我以为密码不对,就在腾讯云服务器实例上选择了重启服务器修改密码。(错误操作的开始 😿)

重启还挺快,也就七八秒,但是我发现我还是登录不进去,就开始脑补,不会被黑了吧 🤖?

image.png

然后就选择了腾讯云提供的第二种登录方式,翻了一下文档发现默认用户名不是 root, 是 ubuntu

进入到服务器之后,先确定 ssh 的 sshd 服务有没有启动

查看 sshd 状态

service sshd status

发现 sshd 服务是正常运行的,但是为什么登录不进去 ❓

突然想到可能是本地 ssh 配置有问题

查看 ~/.ssh/config 文件发现之前的配置没有了,偶对了,最近换电脑了。这个配置没处理... 😭

配置 ssh

重新配置 ~/.ssh/config

添加类似的内容

Host 这里自定义个字符串
    HostName IP地址
    User 用户名
    Port 端口号

IP地址 可以从云服务的控制台找到。

突然想起来,默认的 ubuntu 这个账户的权限挺大的,我好像搞了一个权限更小的账户管理应用,但是记不清用户名了,再确认一下 🙈。

查看服务器上有哪些用户

cat /etc/passwd

从里面找到之前创建的用户。

欧,我又想起来了。我好像把 ssh 的默认端口也给改了,默认端口不安全,我换成其他的了 🐶。

这也是为什么网页版的登录不了,网页版默认端口是 22 🙈

查看 ssh 端口配置

vi /etc/ssh/sshd_config

直接查看 ssh 服务端口

netstat -tnlp | grep sshd

好了,上面 ~/.ssh/config 内需要的内容我们都找好了,配置上。

还有一步,把自己本地 ssh 的公钥加入到服务器的授权名单里,以后就可以免密登录了。

vi ~/.ssh/authorized_keys

服务器可以正常登录了。但是访问了一下,发现应用还挂着 🐤。

我这个小应用是使用 Elixir + Phoenix 开发的后端,数据库用的 PostgreSQL

查看 nginx 的状态

service nginx status

查看 PostgreSQL 的状态

service postgresql status

发现数据库服务是正常运行的。

重启 elixir + Phoenix 应用

应用放在该用户的 home 文件夹的 www 内,找到应用 onePiece(这个小服务是和海贼王相关的 🏴‍☠️),进入 bin 文件夹,里面有个可执行文件 onePiece

# 查看帮助
./onePiece help

# ping 应用 
./onePiece ping

# 启动应用
./onePiece start

然后应用正常启动了 ☠️ ⛵️ ⚓️ 🏝

这才是一开始登录服务器的目的呀... 😹

腾讯云这边做的还挺好,漏洞详情里会给出需要升级的软件的命令。根据命令执行即可。

systemctl 🎈

这个过程中,我产生了一个疑问 🤔,nginxsshdpostgresql 这些服务重启服务器的时候,会自动重启吗?如何查看服务器的开机启动项?

查找资料的时候发现了 systemctl

查看可以使用 systemctl 管理的服务

systemctl list-unit-files

查看开机启动项

ls /etc/systemd/system/multi-user.target.wants/

从这个命令的结果可以看到,我之前有疑问的 nginxsshdpostgresql 服务器重启的时候都会默认启动。

把一个服务添加到开机启动

systemctl enable httpd

systemctl 和 service 命令的区别

我前面重启服务和查看服务状态都用的 service 命令,其实也可以用 systemctl 命令去管理。

二者有什么区别哪?简单来说:

  • systemctl 相比 service 是新一代的 Linux 系统的启动和管理命令
  • systemctl 命令兼容 service
  • 命令格式不太一样 systemctl 是服务名放在最后 systemctl status httpd

systemctl 仅仅是 Systemd 其中一个命令,其实还有更多,包括查看服务器时间、登录用户、启动耗时等等,具体可以参考阮一峰的博文:

Systemd 入门教程:命令篇

Systemd 入门教程:实战篇

本来的目的是,去服务器补漏洞的,结果由于长时间不登录服务器,加上不熟悉,瞎折腾了一番,但是整个过程,经历一次也学习到一些新知识。

我在运维上还有很多不了解的,之后加强学习。

记录本文也是害怕,万一下一次又双叒叕忘了呐 ☠️ 🙈 🐣 🧶 🤪。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK