1. 精华:使用手机生成并安全保管SSH 密钥,在阿里云控制台或直接在实例中部署公钥,彻底替代密码登录,防止暴力破解。
2. 精华:在服务器端配置PAM + Google 验证器,并设置SSH的AuthenticationMethods为公钥+键盘交互,从而实现真正的双因素验证(密钥 + 动态口令)。
3. 精华:不要忘记在阿里云控制台配置好安全组、绑定控制台的MFA(RAM/MFA),并备份私钥与恢复码,确保可恢复性与合规性。
作为一名资深云安全工程师(多年实战),下面我用清晰步骤+命令给你一份可直接操作的图解流程,适用于日本区域的阿里云服务器(ECS)并在手机上完成全部操作。
第一部分:准备(在手机上)。推荐工具:Android 可用 Termux、Termius、JuiceSSH,iOS 可用 Blink Shell 或 Termius。如需图形化生成密钥,也可用 Termius 的键生成功能或使用系统自带的 OpenSSH 客户端。
步骤1:在手机上生成密钥对(推荐 ED25519)。打开Termux或SSH客户端,输入:
ssh-keygen -t ed25519 -a 100 -C "mobile_access" -f ~/.ssh/id_ed25519
说明:这里用ed25519更安全且短小,-a 100提高抗暴力强度。生成时设置一个强口令(私钥保护),并妥善备份私钥(导出到安全的密码管理器或手机系统密钥库)。
步骤2:获取公钥内容:
cat ~/.ssh/id_ed25519.pub
复制公钥(以 ssh-ed25519 开头的一行),准备粘贴到阿里云控制台或服务器的~/.ssh/authorized_keys中。
第二部分:在阿里云控制台(控制台操作)上部署公钥。
步骤1:登录阿里云控制台(建议先为控制台启用MFA,见第三部分)。进入 ECS 控制台 → 实例 → 选择你的日本区域实例 → 更多 → 重置登录凭证/SSH 密钥,或在“实例详情”里找到“密钥对/登录凭证”选项。
两种做法:A)直接在控制台“导入公钥(Import Key Pair)”并关联实例;B)如果实例还可用且你能用密码/控制台登录,可直接将公钥追加到目标用户的 ~/.ssh/authorized_keys。
若使用控制台导入,选择“导入公钥”,粘贴上一步复制的公钥,然后在实例上选择使用该密钥对。若实例已经有密码登录,可通过SSH把公钥追加:
mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo "你的公钥内容" >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
第三部分:服务器端硬化 —— 禁用密码登录并强制密钥认证。
编辑 /etc/ssh/sshd_config(建议先备份):
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
在文件中确认或修改以下项:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication yes(为双因素做准备)
保存后重启SSH:
sudo systemctl restart sshd 或 sudo service sshd restart
注意:在禁用密码前务必确认你的公钥登录无误,否则会把自己锁在外面。建议先在另一个会话验证公钥可登录,再关闭密码。
第四部分:在服务器上启用基于PAM的双因素(Google Authenticator)。
1)安装模块(示例为Ubuntu/Debian):
sudo apt update && sudo apt install libpam-google-authenticator -y
2)每个需要二次认证的用户在服务器上执行:
google-authenticator
按提示回答(建议选择yes生成新的密钥、限制单次认证并更新时间窗口),该命令会输出一个secret key和一个二维码。使用手机上的 Google Authenticator、Authy 或 Microsoft Authenticator 扫码添加。务必保存好备份代码(recovery codes)。
3)修改 PAM 与 SSH 设置:在 /etc/pam.d/sshd 添加一行(通常在文件顶部):
auth required pam_google_authenticator.so nullok
4)在 /etc/ssh/sshd_config 中启用并强制两因素:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive:pam
这会要求同时通过 公钥认证 和 PAM(Google Authenticator) 的键盘交互,从而实现“密钥+OTP”的双因素登录。
5)重启 sshd:
sudo systemctl restart sshd
第五部分:手机端登录实操(以Termius/Termux为例)。
在Termius中导入私钥(建议使用带有口令的私钥),连接时会先走公钥认证,随后服务器会触发PAM的OTP请求,Termius会提示输入一次性口令。打开手机上的Authenticator应用,读取当次6位动态码并输入即可完成登录。
第六部分:控制台与网络安全补充(必做)。
1)在阿里云控制台的 RAM(资源访问管理)中,为控制台账号启用 MFA,并对高权限账号(root/主账号)强制使用虚拟MFA设备。
2)配置 ECS 的 安全组:严格限定22端口来源IP(尽量不要开放到 0.0.0.0/0),手机网络IP容易变动,建议配合静态VPN或跳板机(Bastion Host)来做中转。
3)定期更换密钥与MFA备份码,记录资产变更日志,启用阿里云的安全中心与弱口令检测。
注意事项与故障应对:
- 若误操作导致被锁,使用阿里云控制台的“实例连接”或“序列控制台”功能恢复(很多情况下可以通过控制台直接进入实例修复sshd_config)。
- 保管好私钥与备份码,私钥泄露等同于完全失陷;MFA备份码要离线保存。
- 测试阶段不要直接关闭所有密码登录,先在另一个控制台会话验证再生效。
结论:通过在手机端生成高强度SSH 密钥、在阿里云实例上部署公钥并禁用密码、再结合基于 PAM 的 Google 验证器,可以把日本区域的 阿里云服务器 打造为“密钥+动态口令”的强认证架构。同时别忘了在阿里云控制台启用 MFA、收紧 安全组、并做好私钥与恢复码备份,这样既实用又满足企业级安全与合规的要求。
如果你需要,我可以为你的具体实例生成一份“迁移/加固清单”(含命令与恢复步骤),并按你的手机型号推荐最适合的SSH客户端及密钥存储方法。回复你的系统类型(Ubuntu/CentOS)和手机平台(Android/iOS),我来给出一键可执行的脚本与截图说明。