当我们获得服务器、装载了镜像之后,就要考虑登录问题了。本文使用阿里云网页和本地 pwsh (v7.4.3) 来完成 SSH 连接,方便之后直接在本地 pwsh 连接云服务器的 admin 用户。
为什么要用 SSH 连接
阿里云默认使用密码连接 root、workbench 连接 admin,使用常规 22 端口。这对于一个公网服务器来说并不安全,因为互联网上有恶意攻击的服务器会穷举你的服务器密码,尝试登录 root 用户,进而破坏服务器。
可以在服务器上输入以下命令,看看有没有人尝试登录你的 root 用户:
sudo lastb -n 10
SSH 使用密钥对验证的方式进行免密登录。一个密钥对分为公钥(id_rsa.pub
)和私钥(id_rsa
),客户端存储密钥对,而服务器仅存储公钥。身份认证过程分为六步:
- 客户端向服务器发送连接请求
- 服务器向客户端发送随机明文
- 客户端使用私钥加密接收的明文
- 客户端向服务器发送密文
- 服务器使用公钥解密
- 服务器将解密结果和原来发送的明文比对:如果两者相同,则身份验证成功。
可以看出,使用密钥对可以极大程度的避免穷举密码登录的可能性。
部署 SSH 密钥对
本机生成密钥对
打开 pwsh,输入以下指令生成密钥对:
ssh-keygen -t rsa -C "sample@yourmail.com"
解释: -t
后面参数表示加密算法(默认使用 rsa),-C
后面参数表示注释(一般记录邮箱)
执行后会询问文件存储位置和密钥短语(passphrase),一路按回车即可。
这个时候应该会在 ~/.ssh/
生成一对文件 id_rsa
和 id_rsa.pub
,表示密钥和公钥。
使用以下命令展示公钥内容:
cat .ssh\id_rsa.pub
公钥文件应该以 加密方式 + 公钥文本 + 注释 的结构出现。整个复制下来即可。
服务器上部署公钥
先用密码等其他方式登录服务器。
身份认证用的公钥储存在 ~/.ssh/authorized_keys
文件里,每行一个公钥。
所以直接用 vim 打开此文件,在最后新起一行,粘贴刚才的公钥文件内容即可。
到这里实际上就可以登录了,但为了安全,我们再修改一下登录配置。
修改登录配置
使用以下命令进入配置文件:
sudo vim /etc/ssh/sshd_config
找到被注释的 #Port 22
,取消注释,并修改为任意一个可用的端口。(我选择了 1437)
同时找到以下词条,将后面的 yes/no
修改成如下样式:
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
保存后,重启 sshd 服务:
sudo service sshd restart
在阿里云控制台,记得一并添加防火墙规则,同时修改默认登录端口。
登录
这时候,我们就可以在 pwsh 中用 SSH 登录了:
ssh -p 1437 admin@your_server_ip
之后就直接在 pwsh 中登录即可,不再需要打开阿里云网页登录了。
提示
本机最好只留一个密钥对文件,否则在加密的时候不知道使用哪个密钥,导致 Permission Denied(publickey)
.
如果确实要使用多个密钥对,需要额外配置:
-
ssh-keygen
时,设置新的名字,不要覆盖原来的文件(以~/.ssh/id_aliyun
为例)。 -
使用以下命令将密钥添加到 SSH Agent:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_aliyun
- 配置
~/.ssh/config
# Default Aliyun SSH
Host Aliyun # 随意起名,便于记忆即可
HostName xx.xxx.xxx.xx # 主机公网 IP
Port 1437
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_aliyun # 指定使用的密钥
# second user(monster@qq.com)
Host githuber
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
- 改用以下命令访问:
ssh admin@Aliyun
这也太详细了,支持