零门槛入门EC2!教你分分钟SSH远程登录Amazon EC2服务器

本文最后更新于 2023年10月30日 上午

Amazon(Amazon Web Services)是亚马逊公司提供的集成式云计算平台,它可以为开发人员和系统集成专业人士提供众多的计算、存储、数据库、网络、分析、机器学习和应用服务。并且也是云计算领域的行业领导者之一,很多云服务的标准都是由Amazon建立和牵头的。

Amazon的EC2,是很多新用户入门云计算的梦幻产品。产品价格合适,新用户还可以免费使用一年,而且用户可以用它学习Linux、了解如何SSH远程登录、配置Nginx、搭建网站;甚至是搭建自己的Docker中心仓库、K8S集群等等。中小企业,也经常拿EC2部署自己的服务。

本次教程,就教大家如何使用SSH远程登入自己的Amazon EC2服务器,助力大家成功上云。

Amazon的EC2

2006年,Amazon首次推出Amazon Web Services,目前被认为是第一个真正可用的商业云计算平台,与此同时亚马逊云科技正式推出了他们的前三款产品:EC2(弹性计算机云)、S3(简单存储服务)、SQS(简单队列服务),亚马逊云计算也成为了全球云计算领域的行业领导者之一。

本次的EC2产品,全称是Amazon Elastic Compute Cloud(EC2),一种基于虚拟化技术的弹性云计算服务,它允许用户在云中租用虚拟服务器实例来运行他们的应用程序。可以说自2006年上线开始,已经历时数十年,期间产品不断迭代,已经是非常成熟的产品;甚至夸张点说,目前的Google Cloud、阿里云等云计算厂商,都是看着Amazon“摸石头”过河推出了类似的弹性计算产品。

而且,EC2作为弹性产品。学生用户可以用它进行云计算的入门、个人应用的部署、学习虚拟化技术、弹性扩展等等。对于企业允许根据业务需求灵活地调整服务器实例的规模,弹性和可扩展性使企业能够快速响应市场需求,提供高性能的服务并节约成本。

此外,目前亚马逊云服务器Amazon EC2支持免费试用,最长可免费使用12个月:
Amazon免费试用

服务器的话,原则上建议使用Linux系统,不建议使用Windows Server系统,尤其是在你选配的EC2配置未达到4G内存的时候:)

Amazon账号注册

为了尽可能照顾更多的用户,我们这里讲解一下Amazon账号的注册的注意事项:

  • 新用户认证时候,一定需要使用实体的信用卡,最好是Visa信用卡

这个真的很重要,如果你使用的是虚拟信用卡,可能导致账户被永久封禁…… 为什么我知道呢? 因为我的第一个账号就被永久封禁了:
Amazon被永久封禁

使用银行卡进行身份验证后,需要一定时间的等待:
Amazon免费试用

遇到这个情况,耐心等待即可。

SSH软件推荐

为什么使用SSH进行EC2等Linux服务器的远程登录呢? SSH远程登录的逻辑是这样的:

sequenceDiagram
    participant 客户端
    participant 服务器

    客户端->>服务器: 发起SSH连接请求
    服务器->>客户端: 发送服务器的公钥给客户端
    客户端->>服务器: 生成一个随机会话密钥,并使用服务器公钥加密发送给服务器
    服务器->>客户端: 使用私钥解密会话密钥
    客户端->>服务器: 发送加密的登录凭证(使用会话密钥加密)
    服务器->>客户端: 使用会话密钥解密登录凭证,并进行验证
    Note over 服务器: 验证登录凭证
    服务器->>客户端: 返回验证结果给客户端
    客户端->>服务器: 发送连接请求
    服务器->>客户端: 确立连接并返回连接结果

实际上就是使用SSH的客户端,连接EC2服务器上的SSH服务端,建立加密通讯,实现远程命令行控制。

在SSH登录服务器后,原本的控制台,就是服务器的控制台了:
Amazon控制台

所以,新用户一定要注意⚠️。

这里给大家介绍一下各个平台上可以用于SSH的软件,软件非常多,这里只是列举一些我觉得简单、好用的。

Windows平台

考虑到用Windows平台的人非常多,这里介绍一下Windows平台可以用什么软件SSH:

  • Win10/Win11: Windows Terminal(Windows终端),Win11自带的终端软件,Win10可以在自带的微软商店进行下载,或者在Githuh项目地址进行下载。
  • Win全平台: Putty非常轻量的SSH工具,就是UI可能对新手不是非常友好。
  • Linux/macOS/Win全平台: Termius全平台SSH工具,支持多平台同步,就是付费,而且价格不便宜;建议高端玩家入手。

Windows自带的SSH工具

支持全平台的SSH工具

macOS平台

macOS平台,使用的软件很多,我个人比较喜欢:

  • 自带软件Terminal: macOS自带的Terminal就带有OpenSSL和OpenSSH,可以建议SSH通信。
  • iTerm2: 非常不错的第三方Terminal软件,相比自带的Terminal更加好用。
  • ServerCat: 这个软件后期如果使用Docker,非常方便查看容器的状态;当然也是可以SSH的。可以在AppStore内找到。

macOS自带的SSH工具

Linux平台

恩…… 既然都用Linux客户端发行版本了,那么也没什么好说的。使用自带的Terminal就是非常不错的软件。举个例子,使用Kali Linux:

Linux自带的SSH工具

其他Linux发行版本一般也是“如法炮制”。

快速SSH登录

现在,教程正式开始,先讲解最简单的;其实EC2在初始化的过程中,就是让我们创建SSL证书,用于后续EC2初始化完毕后,使用SSH进行证书登录。

部署新的实例

密钥对(登录)中,我们选择创建RSA密钥对,一会进行默认用户的SSH的远程登录:

创建密钥对

创建好后,私钥会自动下载:
创建并下载下来的密钥

关于安全组,如果你是第一次使用服务器,那么我建议你刚开始可以放行所有端口,后续学习差不多再按需放行;如果你已经对安全组轻车熟路,那么需要放行SSH的默认端口22:
一定放行SSH端口

在创建服务器后,就可以使用公网的IPv4进行登录(这里我分配了弹性IP):
公网IPV4

打开我们本地的SSH工具。macOS和Linux用户可直接使用自带的Terminal工具;Windows11可以使用自带的Windows Terminal(Windows10可以在自带的应用商店内找到Windows Terminal)。

连接的SSH命令:

1
ssh admin@<Amazon EC2S的IP> -i <RSA地址>

其中:

  • admin为Amazon服务器默认用户;
  • <AWS的IP>为上文我们创建的EC2公网IP;
  • <RSA地址>为上文我们创建并自动下载的密钥对。

比如我远程登录成功:
使用RSA远程登录成功

到此,我们的SSH远程登录服务器就完成了。

登录好以后,记得更新软件包管理器,第一次使用最好再进行一次软件更新:

1
2
sudo apt update -y
sudo apt upgrade -y

接下来,我们来看看SSH的更高级方法。

EC2服务端SSH配置

默认情况下,SSH服务端的配置是Linux服务器的:

1
/etc/ssh/sshd_config

我们可以使用vim命令进行编辑,编辑好后,使用systemctl进行sshd(SSH服务端)的重载:

1
sudo systemctl restart sshd

接下来,我们就来看看SSH的一些常用配置。方便在EC2上更流畅地使用SSH。如果你想更加了解vim,可以参考教程:

允许密码登录

如果你先创建一个用户,并且使用密码进行ssh的登录,而不是使用密钥登录。那么你可以这样操作:

1
2
3
4
# 创建一个用户,用来后续ssh登录
sudo useradd -m『用户名』
# 使用passwd命令,初始化用户的密码
sudo passwd 『用户名』

EC2添加一个新的用户

新用户需要注意,passwd为用户进行密码的更改,输入的密码会自动隐藏。

这个时候,我们还是不能登录的,因为EC2默认SSH服务端是不允许密码登录的,只允许密码登录。我们需要修改/etc/ssh/sshd_config的配置:

1
2
# 使用 vim 进行编辑
sudo vim /etc/ssh/sshd_config

添加内容:

1
PasswordAuthentication yes

允许使用密码进行登录

保存后,重新启动sshd服务:

1
sudo systemctl restart sshd

完成这些后,我们就可以使用用户进行密码登录了:

1
ssh 『用户名』@『EC2的公网IP』

比如:
使用密码进行SSH登录

如果你想重新只允许密钥登录,把PasswordAuthentication yes设置为PasswordAuthentication no或者删除即可。

其他用户使用证书登录

其他用户如何使用证书进行登录呢?这边我们还是使用刚刚创建的demo用户进行演示,这次就在Windows上进行操作。

首先使用OpenSSL生成密钥对,用于后续SSH证书登录:

1
ssh-keygen

使用OpenSSL生成密钥对

macOS、Linux同样也自带OpenSSL,都可以使用这个命令生成密钥对。

找到生成的公钥文件:
OpenSSL生成的公钥文件

登录我们的服务器,在家目录($HOME)内创建.ssh目录,并创建authorized_keys文件,将刚刚公钥文件内容添加进去:

1
2
3
4
5
6
# 创建.ssh文件夹
mkdir .ssh
# 进入文件夹内
cd .ssh
# 创建authorized_keys文件
vim authorized_keys

创建SSH文件夹

添加好公钥的结果:
添加好公钥

这个时候就可以进行登录了:
使用密钥登录

禁止Root用户登录

通常情况,我们如果开启了密码登录,那么使用root用户最好禁用密码登录:

1
2
# 编辑SSH服务端配置
sudo vim /etc/ssh/sshd_config

找到以下两行配置:

1
2
#PermitRootLogin yes
#PasswordAuthentication yes

将这两行的注释符号“#”去除,然后修改配置为:

1
2
PermitRootLogin without-password
PasswordAuthentication yes

PermitRootLogin设置为without-password意味着root用户只能使用证书登录,不能使用密码登录;将PasswordAuthentication设置为yes意味着允许通过密码登录;但是PermitRootLogin的优先级高于PasswordAuthentication

高级: 远程用户组

其实SSH的高级操作很多。这里给大家介绍一点点高级的方法。我们在EC2上,可能有多个用户,如何控制只有某些用户可以使用SSH进行远程登录呢?

很简单,创建一个用户组,为设置这个用户组可以使用SSH服务端权限;需要进行远程登录的,就把用户的附加组内加入我们设置的这个用户组:


graph LR
A[输入SSH命令登录远程服务器] --> B[验证客户端身份和凭据]
B --> C[建立SSH连接]
C --> E{是否在远程登录用户组内}
E --> D[SSH服务端验证身份和凭据]
D --> F[授予访问权限]
F --> G[登录到远程服务器]
E -->|否| H[拒绝访问]

style A fill:#C2E0C6,stroke:#026400,stroke-width:2px;
style B fill:#FFCC33,stroke:#C89309,stroke-width:2px;
style C fill:#9BC2E6,stroke:#095169,stroke-width:2px;
style D fill:#9BC2E6,stroke:#095169,stroke-width:2px;
style E fill:#FADBD8,stroke:#A93226,stroke-width:2px;
style F fill:#9BC2E6,stroke:#095169,stroke-width:2px;
style G fill:#F5F5F5,stroke:#000000,stroke-width:2px;
style H fill:#F5A9A9,stroke:#8C0D0D,stroke-width:2px;

操作起来,就是:

1
2
3
4
5
6
# 新建用户组
sudo groupadd 『远程用户组』
# 将新建的用户组,添加到用户的追加组内
sudo usermod -a -G 『远程用户组』 『用户』
# 查看用户的组
sudo groups 『用户』

添加远程登录用户组

最后,在SSH服务端的配置上,加上AllowGroups的配置:

1
AllowGroups 『远程用户组』

配置AllowGroups

记得重启sshd服务哦。

测试一下,顺利的话,就成功了:
测试成功

END

我们的教程到此就结束了,希望你在你的云端之旅中有所收获,也希望你能更轻松地入门EC2。

其实EC2就是一个标准的Linux,大家还可以发挥自己的想象,进一步发挥EC2的潜能。

One More Thing!

亚马逊云科技中国区域免费套餐: https://www.amazonaws.cn/free/?sc_channel=seo&sc_campaign=blog912

感觉教程有用,欢迎在爱发电支持我们✪ω✪



零门槛入门EC2!教你分分钟SSH远程登录Amazon EC2服务器
https://www.mintimate.cn/2023/10/25/GuideToSSH-ConnectAWS-EC2/
作者
Mintimate
发布于
2023年10月25日
许可协议