You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS Session Manager+SSO通过VSCode Remote-SSH连EC2遇公钥权限拒绝

问题分析与解决方法

为什么会触发公钥错误?

虽然AWS Session Manager代理了SSH连接,但本地SSH客户端仍会默认尝试用本地密钥对做身份验证。只有当Session Manager的代理连接完全建立,且EC2上的SSM Agent正确处理SSH流量时,才会跳过本地密钥验证。如果代理命令执行失败(比如语法错误),SSH会降级到常规公钥认证流程,而你未提供对应密钥,就会出现Permission denied (publickey)。

第一步:修复ProxyCommand语法错误

你的~/.ssh/config里存在明显的语法问题:--profile ExProfile--document-name中,ExProfile与--document-name之间缺少空格,导致AWS CLI无法识别--document-name参数,进而SSM会话启动失败。

修正后的配置:

Host i-0dXXXXXXXXXX
    User ubuntu
    ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws sso login --profile ExProfile; aws ssm start-session --target %h --profile ExProfile --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

第二步:确认EC2实例的前置条件

  • SSM Agent正常运行:Ubuntu 18.04+官方AMI默认预装SSM Agent,可通过sudo systemctl status amazon-ssm-agent验证状态,未安装则手动部署。
  • IAM权限配置正确:你的SSO关联角色需包含AmazonSSMFullAccess(或最小权限集:ssm:StartSession、ssm:DescribeSessions、ssm:TerminateSession,以及ec2:DescribeInstances)。
  • 实例IAM角色权限:EC2实例的IAM配置文件需附加AmazonSSMManagedInstanceCore策略,确保SSM Agent能与AWS服务通信。

第三步:强制SSH跳过本地密钥验证(推荐)

为避免SSH降级到公钥认证,可在ssh config中添加IdentitiesOnly yes,强制SSH仅依赖Session Manager代理完成身份验证:

Host i-0dXXXXXXXXXX
    User ubuntu
    IdentitiesOnly yes
    ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws sso login --profile ExProfile; aws ssm start-session --target %h --profile ExProfile --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

第四步:单独验证SSM会话可用性

先在PowerShell中手动执行以下命令,确认SSM会话能正常启动:

aws sso login --profile ExProfile
aws ssm start-session --target i-0dXXXXXXXXXX --profile ExProfile --document-name AWS-StartSSHSession --parameters 'portNumber=22'

如果这一步能成功建立会话,说明SSO与SSM配置无问题,再尝试VSCode Remote-SSH连接即可。


内容的提问来源于stack exchange,提问作者JPcodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:48:16