安全连接防爆破。
# 序
二〇二五年以来,越来越多的\(\text{IDC}\)在服务器\(\text{Rebuild}\)页面要求用户使用SSH Key安全地连接远程服务器,以有效避免密码遭暴力破解导致的数据泄露或系统损害。本帖详细介绍如何在\(\text{MacOS}\)中利用\(\text{SSH Key}\)建立与远程服务器的安全连接,并演示在\(\text{Control Panel}\)中对应的操作步骤,以期为新手用户提供参考。
# 生成SSH Key的公钥与私钥
用户在本机\(\text{MacOS}\)上通过\(\text{SSH Key}\)安全连接远程服务器时,利用\(\text{Private Key (私钥)}\)对通信进行加密或签名,服务器用对应的\(\text{Public Key (公钥)}\)验证身份,从而实现免密码安全登录。可见,公钥保存在远程服务器,而私钥保存在本机\(\text{MacOS}\)。正确生成和存放\(\text{SSH Key}\)的公钥和私钥,是实现安全远程服务器连接的关键基础。
具体而言,有两种方式生成上述密钥:
一种是通过\(\text{IDC}\)的\(\text{Rebuild}\)页面提供的生成\(\text{SSH Key}\)功能,同时创建公钥和私钥,复制其中的私钥存储于本机\(\text{MacOS}\)。具体可以新建文本存储上述\(\text{Figure 2}\)中第\(\text{3}\)点所对应的私钥,然后去除文本的扩展名。


另一种方法是通过\(\text{MacOS}\)的\(\text{Terminal (终端)}\)创建\(\text{SSH Key}\),如下所示:
ssh-keygen -t rsa
输出: Enter file in which to save the key (/Users/atlas/.ssh/id_rsa):此处随意填写密钥文件名,不要填写扩展名
输出: Enter passphrase for "test1" (empty for no passphrase):此处输入密码,可留空
代码执行后,终端所在目录将生成 密钥文件名 和 密钥文件名.pub ,前者是私钥文件,后者存放公钥信息。复制公钥文件的内容至远程服务器\(\text{Rebuild}\)页面的\(\text{SSH Key}\)对应部分\(\text{ (Figure 3)}\)。

如果\(\text{Rebuild}\)页面无法输入公钥,需等待服务器成功部署后,通过密码连接然后手动上传公钥至指定位置:
# 根据用户账号确定公钥存放位置
# root用户,复制公钥至该文件
vi /root/.ssh/authorized_keys
# 普通用户,复制公钥至该文件
vi /home/用户名/.ssh/authorized_keys
其中\(\text{.ssh}\)目录权限通常设置为\(700\),\(\text{authorized_keys}\)文件权限设置为\(600\),否则\(\text{SSH}\)可能拒绝使用它进行密钥登陆。
参考此处关闭密码认证,仅保留\(\text{SSH Key}\)登陆。# 本机通过私钥连接远程服务器
私钥文件权限不能过宽,否则\(\text{SSH}\)会拒绝使用。因此在通过私钥远程连接服务器之前,应先修改私钥文件权限。\(\text{MacOS}\)进入私钥终端所在目录后,通过以下代码修改私钥文件权限:
chmod 600 ./私钥文件
权限修改完成后,保持终端位于私钥文件所在目录,通过 ssh -i 指定私钥安全连接远程服务器:
ssh -i ./私钥文件 -p 22 user@host
# 补充材料
重置记录的主机
重装系统后若\(\text{SSH}\)提示主机指纹与本地指纹不一致而拒绝连接,则需删除旧的\(\text{known_hosts}\)记录:
\(\text{提示: Host key has changed and you have requested strict checking. Host key verification failed.}\)
ssh-keygen -R your-server-ip
关闭密码认证,仅保留\(\text{SSH Key}\)登陆
有的\(\text{IDC}\)没有强制关闭密码认证,可以通过以下方式手动关闭密码认证,让服务器只能通过\(\text{SSH Key}\)安全登陆。具体而言,修改\(\text{/etc/ssh/sshd_config}\):
# 确保PasswordAuthentication为no,PubkeyAuthentication为yes,删除前面的#(若有)
PasswordAuthentication no
PubkeyAuthentication yes
#重启ssh
sudo systemctl restart ssh
若发现密码依旧可以登陆,则检查目录下\(\text{sshd_config.d}\)等文件夹内的配置,确保里面的\(\text{PasswordAuthentication}\)为 no 。
通过\(\text{ssh}\)命令行利用\(\text{ssh key}\)远程连接服务器
利用本地私钥在\(\text{MacOS}\)终端中的远程命令行如下:
ssh -i private_key_file -p port_num username@server-ip-address
# example ssh -i ./pk -p 22 root@1.2.3.4