服务器探索之旅:选购和登陆

455 阅读8分钟

去年在阿里云上购买了第一台云服务器作为个人学习使用。在这台服务器上,我实践了linux系统操作、mysql、mongodb、docker、jenkins、node等各种好用的技能,受益匪浅。

可惜当时不知道 新人专享 的优惠福利,只买了1年的有效期,直到续费时看到那个费用才追悔莫及。噫吁嚱,悔乎迟矣!😭

一、服务器选购

阿里云的服务器到期之后,我开始转战腾讯云。因为我的腾讯云还没注册过,可以享受新人优惠。

这一次我果断选了服务器3年的有效期,注册账号后,实名认证。新人第一次购买打骨折,配置是1核2G,系统环境选的是centOS 7.6。

因此:

以下所有的配置都是基于centOS 7.6系统环境下的。

服务器购买成功后,我们先进行第一次登陆。

image-20201227163551118

控制台里选择购买的实例,进去后重置密码,然后重启服务器。

因为云服务器一般均会预装好 ssh 服务,所以可以直接用终端连接:

ssh -p 22 root@ip

其中root指默认管理员用户,ip则是该服务器的公网ip,因为默认ssh端口就是22,可以省略-p 22

ssh root@ip

提示输入完密码,输完后即可登录上这台服务器啦。(上车上车)

注:登录服务器需要使用到 ssh 协议,如果是 Mac 用户,默认的 terminal 终端即可支持,而 Windows 用户可以安装 Git for Windows 来进行操作。

二、开启防火墙和配置安全组

新购的服务器怎么能没有防火墙呢?于是第一步就是查看防火墙的状态:

systemctl status firewalld

发现是Active: inactive (dead),于是开启防火墙服务,并设置开启自启动

# 启动防火墙
systemctl start firewalld

# 设置开机启动防火墙
systemctl enable firewalld

再次查看状态就显示Active: active (running)

image-20201228093310448

常用的防火墙相关命令如下:

systemctl status firewalld # 查看防火墙服务状态
systemctl start firewalld # 启动防火墙服务
systemctl stop firewalld # 关闭防火墙服务
systemctl restart firewalld # 重启防火墙服务
systemctl enable firewalld # 开机自启防火墙服务
systemctl disable firewalld # 禁止自启防火墙服务

# 防火墙新增开放一个端口号
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 开放多个端口:
firewall-cmd --zone=public --add-port=80-90/tcp --permanent
# 删除一个端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
# –-zone #作用域
# –-add-port=80/tcp #添加端口,格式为:端口/通讯协议
# --remove-port=80/tcp #移除端口,格式为:端口/通讯协议
# –-permanent 永久生效,没有此参数重启后失效

# 查看防火墙相关信息,包括添加的端口
firewall-cmd --list-all
# 在不改变状态的条件下重新加载防火墙(注:修改了防火墙端口后,需要重载服务)
firewall-cmd --reload

开启了服务器内的防火墙服务,还需要在实例中配置安全组规则。

image-20201228100351348

安全组是一种虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。

您可以通过配置安全组规则,允许或禁止安全组内的实例的出流量和入流量。

简单的说,安全组就是在外面再加一层防火墙,只有内外“两个防火墙”的端口都开放了,那个端口才能被访问。

默认的安全组规则是开放所有端口,这是相对不安全的,因此我们创建一个新的安全组,只设置我们需要暴露出去的几个端口,然后将新创建的安全组绑定到服务器实例上,并取消默认安全组的绑定。

image-20201228101245113

三、修改主机名

作为一个强迫症患者,进去后主机名那一连串随机字符简直不能忍,于是开启防火墙之后,第二件事就是修改主机名。

注:主机名最好用连续的小写字母,因为任何特殊字符或空白字符会被移除,而提供的参数中的任何大写字母会自动转化为小写。

  • 临时修改

    使用命令行修改 hostname 主机名(可自定义),如hostname myHostName,重新登录 shell 生效。

    注:此命令只是暂时的修改linux的主机名,它的存活时间为linux当前的运行时间,即在下一次服务器重启前的运行时间内。

  • 永久修改

    如果是 CentOS 7 操作系统,可以使用命令hostnamectl set-hostname 主机名 来修改,修改完毕后重新 SHELL 登录即可。如:

    hostnamectl set-hostname myHostName
    

    如果是 Ubuntu 系统,则需要修改文件 /etc/hostname, 将其对应的主机名修改为新的主机名。

修改完成后,再次登陆进去,即可看到主机名已修改啦。

image-20201228102132525

四、修改ssh默认端口

ssh是安全的加密协议,默认端口是22 ssh -p 22 root@ip ,不写可以省略,但是默认22端口不安全,因此我们需要修改ssh默认端口

vim /etc/ssh/sshd_config
# 注:vim是linux系统里的常用编辑器,具体文件的创建、修改、删除等操作自行查阅了解。

要注意是编辑文件名为sshd_config,是指sshd服务的配置,而不是ssh_config。

进入到文件里后找到里面的 # Port 22

# Port 22 前面的 # 去掉,后面22端口改成自定义端口,如: Port 10022

建议Port 22同时保留,防止修改失误后无法远程连接服务器,修改成功后再注释去掉22。

保存退出vim界面,重启服务。

image-20201228104257120

注意:在修改ssh默认端口前,要先去设置防火墙 + 云服务器的安全组规则,开放你所设置的端口,然后再去改配置文件。

  1. 去安全组里添加规则,添加一个10022端口,具体详见服务器提供商文档。

  2. 然后登陆云服务器,查询该端口是否被占用:

    firewall-cmd --permanent --query-port=10022/tcp
    

    如果是no,就添加一下,成功后重载防火墙:

    firewall-cmd --zone=public --add-port=10022/tcp --permanent
    firewall-cmd --reload
    

修改了ssh端口 还要告诉SElinux做了改变。也就是sshd_config文件里的这个提示:

image-20201228105233126

SELinux是linux系统里的一个安全模块,想要了解的可自行查阅。

于是运行:

semanage port -a -t ssh_port_t -p tcp 10022

如果提示没有semanage命令,那么可进行如下操作:

# 查找semanage是通过哪个安装包来提供的
yum whatprovides semanage
# 查找完成后 运行安装
yum install /*上面查出来的包名*/

安装完成后,再次运行

semanage port -a -t ssh_port_t -p tcp 10022
# 查看是否设置成功
semanage port -l | grep ssh

最后重启服务即可修改成功,退出后用新端口重新登录。

然后去除上面的22端口:

# 防火墙去除
firewall-cmd --zone=public --remove-port=22/tcp --permanent
# SElinux去除
semanage port -d -t ssh_port_t -p tcp 22
# 重启防火墙服务
systemctl restart firewalld

五、ssh密钥登陆

登陆云服务器的方式其实有很多种,比如通过账号密码/密钥的命令行登陆、通过安装图形化工具进行图形化登陆、通过控制台实例里的远程连接登陆

但是相对来说,最常用的还是ssh命令行登陆方式。

其中通过ssh root@ip账号/密码登陆,每次连接都要输入用户、ip和登陆密码,比较麻烦,并不适合常年都是在自己电脑上使用的场景,它更适合需要切换设备、在多个不同的地方登陆访问的场景,因此我们这里主要配置便捷的密钥登陆。

创建密钥主要有两种方式:

  • 云服务器控制台里直接创建密钥对。

  • 自己通过ssh-keygen生成密钥对。

两种方式实现效果都一样,这里介绍第一种最简单的方式创建:

image-20201228111138356

创建成功后,会自动下载密钥.pem文件到电脑上,这里将.pem私钥文件放在~/.ssh/下,修改权限:

chmod 400 ~/.ssh/你的私钥文件

接着在.ssh/里的config进行配置:

vim ~/.ssh/config

# 在该文件里编辑如下
Host test   # 这里test是别名,等会你就可以直接 “ssh test” 就能登陆服务器了
    HostName 121.199.57.149 # 这里是你的服务器ip
    Port 10022 # 你的服务器ssh端口
    User root # 登录用户
    IdentityFile ~/.ssh/ali_ecs_study.pem  # 私钥地址

修改成功后保存,这样服务器端就有了公钥(公钥要绑定到你的服务器实例上),客户端上就有了私钥,相当于双端互留了电话号码,接着直接连接即可登录了:

ssh test

注:如果配置了密钥登陆,设置里会默认关闭密码登录。如果你要同时可以密钥登录或者密码登录,重置下实例密码即可。