Loading... <div class="tip inlineBlock warning simple"> 🤖 本博客内容使用 GPT-4 技术进行润色 </div> # 一、设置用户组 & 用户 ## 1、登录远程服务器 ### ① 方法一:通过浏览器登录 1. 如果购买的阿里云服务器,可以在实例列表中找到目标服务器,在远程连接中选择 VNC 以打开管理终端。 2. 打开管理终端后,记住初始密码并输入该密码。接着,输入账号 `root` 和相应密码,以 root 用户身份登录远程服务器。最后,使用命令 `exit` 退出登录。 ![实例列表](https://www.huarzone.com/usr/uploads/images/blog-images/99/1148477430.png) ### ② 方法二:通过本地登录([检查是否安装 OpenSSH](https://www.jianshu.com/p/efa0e0d71637)) 1. 按下 `Win + R` 键,输入 `powershell` 以打开 PowerShell。然后输入 `ssh root@你的公网ip`,输入密码后即可以 root 用户身份登录远程服务器。 ![本地登录远程服务器](https://www.huarzone.com/usr/uploads/images/blog-images/99/2030994819.png) ## 2、创建用户组和用户 1. 使用命令 `groupadd adminuser` 创建 `adminuser` 组。 2. 接着,使用命令 `useradd learn -g adminuser` 创建用户 `learn` 并将其添加至 `adminuser` 组。 3. 最后,使用命令 `passwd learn` 设置用户 `learn` 的密码,输入两遍密码后完成设置。 4. 使用命令 `exit` 退出登录,然后使用新创建的用户登录。 ![创建用户和组](https://www.huarzone.com/usr/uploads/images/blog-images/99/1387413733.png) ## 3、修改新用户的权限(以 root 用户操作) 1. 输入命令 `cd /etc` 切换到 `/etc` 目录,并使用 `ls` 命令查看该目录下的所有文件。接着,输入命令 `vim sudoers` 打开编辑 `sudoers` 文件。 2. 在 `sudoers` 文件中找到包含 `root` 的行,按 `i` 键进入编辑模式,在 `root` 的下一行添加 `learn ALL=(ALL) ALL`。按 `Esc` 退出编辑模式。 3. 按 `Shift + ;` 即 `:`,输入 `wq!` 并回车,强制保存并退出文件。 ![强制保存并退出文件](https://www.huarzone.com/usr/uploads/images/blog-images/99/13922321.png) ## 4、禁止 root 账号进行 SSH 远程登录 1. 输入命令 `cd /etc/ssh` 切换到 `/etc/ssh` 目录,并使用 `ls` 命令查看该目录下的所有文件。接着,输入命令 `vim sshd_config` 打开 `sshd_config` 文件。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/2193940672.png) 2. 在 `sshd_config` 文件中找到 `#PermitRootLogin yes`,按 `i` 键进入编辑模式,将其修改为 `PermitRootLogin no`,并去掉 `#` 符号。按 `Esc` 退出编辑模式。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1106277771.png) 3. 按 `:`,输入 `wq` 并回车以保存并退出文件。 4. 修改完配置文件后,使用命令 `systemctl restart sshd.service` 重启 SSH 服务。然后输入 `exit` 退出登录。再次尝试使用 root 账号登录时,您会发现登录请求被拒绝。此时,您可以使用 `Ctrl + C` 键终止当前命令。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/2632996563.png) 5. 至此,我们成功禁止了 root 账号进行 SSH 远程登录,但可以通过刚创建的用户 `learn` 进行登录操作。 # 二、设置远程登录证书 ## 1、创建证书(公钥文件和私钥文件) * 直接打开 PowerShell(无需登录 SSH),输入命令 `ls`。您会发现存在文件 `.ssh`。如果没有 `.ssh` 文件,则需要通过命令 `mkdir .ssh` 创建该文件夹;如果存在,则可以忽略此操作。(Mac/Linux 用户,输入 `ls` 仅显示一般文件,需要输入 `ls -a` 才能显示隐藏文件。)![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1549514012.png) * 使用命令 `cd .ssh` 进入 `.ssh` 目录,接着输入命令 `ssh-keygen -t rsa -C learn -f learnfile` 生成证书。对于后续的所有提示,直接回车跳过。最后,通过 `ls` 查看文件夹下的文件,您会发现多了 `learnfile`(私钥)和 `learnfile.pub`(公钥)两个文件。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/2289598515.png) ## 2、将公钥文件(learnfile.pub)上传到服务器 * 仍保持在 `.ssh` 路径下,执行命令 `scp learnfile.pub learn@你的公网ip:.`,然后按照提示输入 `learn` 用户的密码,等待进度达到百分之百即表示上传完成。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/3122574510.png) ## 3、登录服务器进行设置 * 首先使用 `learn` 用户登录服务器,输入 `ls` 命令查看文件,您会发现刚才上传的 `learnfile.pub` 文件。接着使用 `ls -a` 查看所有文件,发现没有 `.ssh` 文件。 * 通过命令 `mkdir .ssh` 创建 `.ssh` 文件夹,再次查看所有文件,您会发现 `.ssh` 文件夹已创建。然后通过命令 `cd .ssh` 进入该文件夹,通过命令 `touch authorized_keys` 创建 `authorized_keys` 文件(文件名称一定不能打错,图中是错误的)。 * 通过命令 `cd ..` 返回到 `.ssh` 的父文件夹,执行命令 `cat learnfile.pub >> ~/.ssh/authorized_keys` 将 `learnfile.pub` 写入 `authorized_keys` 文件中。写完之后,可以通过命令 `rm learnfile.pub` 删除 `learnfile.pub`(公钥文件)。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1609818441.png) ## 4、修改证书文件夹的权限 * 通过命令 `ls -al` 查看文件的详细信息,会发现 `.ssh` 文件夹的访问权限为 `drwxr-xr-x`,其中 `d` 表示这是个文件夹,剩下的 9 个字符可以分成三组 `rwx/r-x/r-x`。第一组表示对于该文件夹的所有者(即 `learn`)可读、可写、可执行;第二组表示对于 `adminuser` 用户组内的所有用户可读不可写可执行;第三组表示对于其他用户可读不可写可执行。 * 我们的目标是修改 `.ssh` 文件夹和 `authorized_keys` 文件的访问权限,仅允许文件所有者访问。 * 执行命令 `chmod 700 .ssh` 修改 `.ssh` 文件夹的访问权限。接着,使用命令 `cd .ssh` 进入 `.ssh` 文件路径,再通过命令 `ls -al` 查看文件的详细信息,执行命令 `chmod 600 authorized_keys` 修改 `authorized_keys` 文件的访问权限,最后退出服务器登录。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1671379134.png) ## 5、创建配置文件 * 退出登录后,首先可以通过命令 `rm learnfile.pub` 删除 `learnfile.pub`(公钥文件),然后创建配置文件 `config`。 * Mac/Linux 用户可以直接通过命令 `vim config` 创建并进入 `config` 文件,并在文件中写入以下内容: ``` Host learn HostName 你的公网IP Port 22 User learn IdentityFile ~/.ssh/learnfile ``` * Windows 用户可以在桌面新建文本文档 `config.txt` 并写入以上内容。然后在 PowerShell 中,通过命令 `cd Desktop` 进入桌面路径,使用 `ls` 查看 `config.txt` 文件,执行命令 `mv config.txt ~/.ssh` 将文件移动到 `.ssh` 文件夹下。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/4028925754.png) * 然后通过 `cd ..` 返回到父文件夹,再通过命令 `cd .ssh` 进入 `.ssh` 路径,会发现存在文件 `config.txt`。接着通过命令 `mv config.txt config` 将 `config.txt` 文件重命名为 `config` 文件。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1090730265.png) * 最后,您可以直接通过命令 `ssh learn` 来登录远程服务器,而无需输入密码。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1327828942.png) # 三、设置安全防火墙服务 ## 1、更新 yum 功能 * 远程登录服务器,执行命令 `yum update` 进行更新。但是,由于当前登录的是 `learn` 账户,可能会显示没有 root 权限。因此,我们需要执行命令 `sudo yum update` 进行更新。这里的 `sudo` 表示后面的命令将以超级管理员的身份执行。输入 `learn` 账户的密码后即可进行更新。执行过程中会提示是否继续更新,输入 `y` 即可继续。 * 另外,我们也可以通过命令 `sudo yum -y update` 进行更新,其中 `-y` 表示如果更新过程中需要输入 `y` 继续,系统会自动处理,无需手动输入。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/2726428653.png) ## 2、安装插件并启动服务 * `learn` 用户在使用 `yum` 安装插件时需要添加 `sudo` 以超级管理员身份执行命令。执行命令 `sudo yum install -y cronie yum-cron` 安装 `cronie` 和 `yum-cron` 插件。 - `cronie` 是一个基于 cron 的任务调度程序,允许用户在指定的时间或周期执行任务。它可以用来设置定期执行的系统维护任务,比如备份、清理临时文件等。 - `yum-cron` 是一个与 `yum` 结合的插件,专门用于自动更新软件包。安装 `yum-cron` 后,可以配置系统自动检查和安装软件包更新,确保系统始终保持最新状态,减少安全风险和软件漏洞。 ![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1294842192.png) * 同样,使用 `vim` 编辑配置文件时,也需要添加 `sudo`。执行命令 `sudo vim /etc/yum/yum-cron.conf` 打开配置文件 `yum-cron.conf`,将配置文件中的 `apply_updates = no` 改为 `apply_updates = yes`,目的是开启自动更新功能。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/2983191388.png) * 执行命令 `sudo systemctl start crond` 和 `sudo systemctl start yum-cron` 启动 `crond` 和 `yum-cron` 服务。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/3117469594.png) ## 3、安装并启动防火墙服务 * 执行命令 `sudo yum install -y firewalld` 安装防火墙。如果已经安装,则会显示已安装且是最新版本,无需任何处理。 * 然后执行命令 `sudo systemctl start firewalld.service` 启动防火墙服务,并通过命令 `sudo firewall-cmd --list-all` 来查看防火墙状态。(关于服务器的更多操作命令,可以查看我之前的文章:[《CentOS7使用firewalld打开关闭防火墙与端口》](https://www.jianshu.com/p/3fd584cadfef))![](https://www.huarzone.com/usr/uploads/images/blog-images/99/585561604.png) # 四、设置远程连接开放端口 ## 1、修改 SSH 相关的配置文件 * 执行命令 `sudo vim /etc/ssh/sshd_config` 打开配置文件 `sshd_config`,找到 `#Port 22` 所在的一行,并修改为 `Port 12345`(此处端口可以设置为 `1024-65535` 之间的任意端口),最后保存并退出。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/136328669.png) * 执行命令 `sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/` 将防火墙中关于 SSH 的配置文件拷贝出来,然后执行 `sudo vim /etc/firewalld/services/ssh.xml` 打开配置文件 `ssh.xml`,找到 `port="22"` 并修改为 `port="12345"`,最后保存并退出。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/678187232.png) ## 第二步:修改安全组中的配置规则 进入阿里云后台: 1. 打开安全组选项; 2. 打开配置规则并修改相应的配置规则; 3. 点击添加安全组规则; 4. 填写相应的端口范围; 5. 授权对象填 `0.0.0.0/0` 表示对所有人授权。![安全组的配置规则](https://www.huarzone.com/usr/uploads/images/blog-images/99/3518736053.png) ![添加安全组规则](https://www.huarzone.com/usr/uploads/images/blog-images/99/2768476351.png) ## 第三步:重启防火墙服务和 sshd 服务 * 重启防火墙和 SSH 服务会导致与本地断开连接,因此建议通过阿里云后台的 VNC 进入远程连接。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/4061000055.png) * 首先登录 `learn` 用户,然后输入命令 `sudo systemctl restart sshd.service` 重启 SSH 服务,再输入命令 `sudo systemctl restart firewalld.service` 重启防火墙服务。最后输入 `exit` 命令退出登录。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/557184736.png) ## 第四步:修改本地 config 配置文件 * 首先打开电脑终端 PowerShell,输入 `cd .ssh` 进入 `.ssh` 路径下。Mac 用户输入命令 `vim config` ,Windows 用户则输入命令 `notepad config` 修改 `config` 配置文件,将端口号改为 `12345`。![](https://www.huarzone.com/usr/uploads/images/blog-images/99/1424424709.png) * 最后,我们可以通过命令 `ssh learn` 登录远程服务器!![](https://www.huarzone.com/usr/uploads/images/blog-images/99/2039828097.png) Last modification:August 4, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏