安装Linux/Ubuntu的阿里云ECS默认情况下是使用账号+密码通过SSH登录的,并且默认账户是root,所以这里难免会有安全隐患。
因此这里记录一下:Linux/Ubuntu系统怎么设置普通用户(非root用户),本教程以admin用户为例,使用秘钥登录通过SSH登录远程服务器。

本地端流程

检查本地SSH Key

检查本地是否已经存在SSH Key秘钥,输入下面的命令来检查本地是否已经存在秘钥,如果有下面结果则跳过该步,若没有那么接下来的步骤生成秘钥

$ ls -a ~/.ssh
.        ..        authorized_keys    id_rsa        id_rsa.pub    known_hosts

生成本地SSH Key秘钥

输入以下命令,默认会在相应路径下(~/.ssh)生成id_rsa和id_rsa.pub两个文件,如下面代码所示

# 注:若需要免密码登录则直接回车
~$ ssh-keygen -t rsa -C "your_email@example.com"   
Enter file in which to save the key (/your_home_path/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /your_home_path/.ssh/id_rsa.
Your public key has been saved in /your_home_path/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YgZkAauw6YCWAWwvfiMgJ7zBGkVbFqgRxQ7hdet5nGY your_email@example.com
The key's randomart image is:
+---[RSA 2048]----+
|BO=++o           |
|Bo++. .          |
|oOo ..           |
|+==...o .        |
|X+.  o+ES        |
|=X + o+.         |
|.oX .            |
|..               |
|                 |
+----[SHA256]-----+

服务器端流程

创建普通用户
使用root用户操作以下命令创建普通用户:

创建用户并修改密码

useradd admin
passwd admin
vi /etc/sudoers                                 # 增加用户su身份,编辑sudoers文件
admin ALL=(ALL:ALL) ALL                         # 在最底部加入这一行,保存退出

添加ssh key公钥配置

使用root用户操作以下命令创建存储密钥的文件夹及文件

注意:第三步是最重要的一步!!!

mkdir /home/admin/.ssh
chmod 700 /home/admin/.ssh                       
vi /home/admin/.ssh/authorized_keys            #创建authorized_keys文件,并将本地生成的id_rsa.pub的内容填入authorized_keys
chmod 600 /home/admin/.ssh/authorized_keys     #设置authorized_keys权限
chown -R admin:admin /home/admin/.ssh/         #修改用户组和用户所有权
systemctl stop sshd                            #暂停ssh服务
systemctl start sshd                           #启动ssh服务

设置SSH登录安全配置(可选步骤)

温馨提示:SSH登录安全配置建议,使用root用户操作以下命令

# 编辑SSH配置文件 
vi /etc/ssh/sshd_config
PermitRootLogin no                             # 禁用root账号登录,该配置可不修改,避免特殊情况下需要用到root
PasswordAuthentication no                      # 禁用账号+密码登录
# 保存退出后,重启ssh服务
systemctl stop sshd
systemctl start sshd

本地验证登录

因为每次记ip很麻烦,推荐使用hosts映射ip,使用别名登录。

添加远端ip别名

vi /etc/hosts
xxx.xxx.xxx.xxx   my-remote-server              # 添加远端ip及映射的别名:ip  别名

验证ssh免密登录

ssh admin@xxx.xxx.xxx.xxx                       # ip远程登录
ssh admin@my-remote-server                      # 别名远程登录