SSH通过AWS SSM实战指南
项目介绍
SSH over AWS SSM 是一个简洁的解决方案,它允许开发者和系统管理员无需通过传统的bastion主机或公开访问实例,即可直接通过AWS Systems Manager (SSM)进行SSH连接到EC2实例。此方法特别适合那些对安全性和管理性有着高要求的场景,因为它依赖于IAM权限而非本地存储的SSH密钥。用户只需拥有足够的IAM权限以及能够访问其区域内的SSM端点,就能轻松实现加密的远程连接,支持SSH的所有高级功能如代理跳转、端口转发等。
项目快速启动
环境准备
- 确保条件:EC2实例需能访问
ssm.[region].amazonaws.com
的443端口;附加了允许SSM访问的IAM实例角色;已安装SSM Agent。 - 本地环境:安装AWS CLI v2和Session Manager插件。
- 下载脚本:从GitHub克隆项目或直接下载
ssh-ssm.sh
脚本至本地可执行路径。
git clone https://github.com/elpy1/ssh-over-ssm.git
cp ssh-over-ssm/ssh-ssm.sh ~/bin/ # 或其他PATH目录
chmod +x ~/bin/ssh-ssm.sh
配置SSH
编辑~/.ssh/config
,添加以下配置以启用SSH通过SSM的ProxyCommand:
Host *
TCPKeepAlive yes
ServerAliveInterval 30
ConnectTimeout 10
Match Host i-*
ProxyCommand ssh-ssm.sh %h %r
IdentityFile ~/.ssh/ssm-ssh-tmp
StrictHostKeyChecking no
BatchMode yes
更新SSM Agent(如果需要)
使用提供的脚本检查并更新所有实例上的SSM Agent:
python3 ssm-tool instance # 列出实例状态
python3 ssm-tool --update # 自动更新所有实例的SSM Agent(确保正确设置了AWS_PROFILE)
进行SSH连接
现在可以通过指定用户名和实例ID进行SSH连接:
ssh ec2-user@i-0123456789abcdef
记得设置正确的AWS Profile环境变量或者在命令中指定:
AWS_PROFILE=my-profile ssh ec2-user@i-0123456789abcdef
应用案例和最佳实践
- 无密码/密钥的远程操作:利用IAM策略控制SSH访问,避免在服务器上存放私钥。
- 临时密钥管理:脚本自动处理公钥的上传与删除,提高安全性。
- 动态实例管理:结合自动化工具,快速接入新实例或更换失效实例。
- 细粒度权限控制:通过SSM文档限制特定任务,增强安全性。
典型生态项目
虽然此示例专注于ssh-over-ssm
本身,但在AWS生态中,它常与云原生的基础设施即代码工具如Terraform、CloudFormation搭配使用,用于自动化部署和管理SSH可通过SSM的EC2实例。此外,结合CI/CD流程(如Jenkins或GitLab CI),可以进一步自动化测试环境的构建与维护,其中SSH连接便于进行手动介入调试或执行特殊命令。
以上步骤和建议提供了一个清晰的路径来开始使用SSH over AWS SSM,不仅简化了远程运维工作,也加强了安全控制。通过这种模式,运维团队能够在保持高效的同时,满足更严格的访问控制需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考