无法使用 SSH 访问 AWS CodeCommit

Posted

技术标签:

【中文标题】无法使用 SSH 访问 AWS CodeCommit【英文标题】:Can't access AWS CodeCommit with SSH 【发布时间】:2016-01-03 19:26:36 【问题描述】:

很难弄清楚如何让 AWS CodeCommit 与标准 SSH 身份验证一起工作。看到另一个这样的话题,但没有答案,我还不允许发表评论。这是在 Windows 上使用 Git Bash。

重现步骤

    已创建具有完全权限的 IAM 用户 (AwsAdministrator) 来自 ~/.ssh 中的 Git Bash “cat id_rsa.pub”并将输出复制到剪贴板 在 IAM 控制台中,单击按钮添加 SSH 密钥并粘贴到输入字段中。点击保存。 尝试访问 CodeCommit 存储库(在这种情况下尝试推送)并获得“权限被拒绝”。

Git + SSH 输出

这是我从带有 DEBUG3 日志记录的 SSH 中得到的:

debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/Dan/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: fp SHA256:<omitted>
debug3: sign_and_send_pubkey: RSA SHA256:<same-as-above>
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
fatal: Could not read from remote repository.

为了比较,这是我使用与 GitHub 完全相同的 SSH 密钥得到的结果:

debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/Dan/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: fp SHA256:<same-as-above>
debug3: sign_and_send_pubkey: RSA SHA256:<same-as-above>
debug1: Authentication succeeded (publickey).
Authenticated to github.com ([192.30.252.130]:22).

以上输出来自于运行一个普通的 git 命令,例如 git push origin master,并在 .ssh/config 中启用了 ssh 调试日志记录:

Host git-codecommit.us-east-1.amazonaws.com
  LogLevel DEBUG3

Host github.com
  LogLevel DEBUG3

【问题讨论】:

您用来获取此日志的命令是什么?您可以在服务器错误日志中看到什么? @Jakuje 用我如何运行命令来获取日志更新了描述。不知道如何查看 AWS 和 GitHub 的服务器日志? 【参考方案1】:

您似乎错过了设置 SSH 的步骤。您需要将此信息添加到您的 .ssh/config 文件中:

Host git-codecommit.us-east-1.amazonaws.com
   User Your-SSH-Key-ID, such as APKAEIBAERJR2EXAMPLE
   IdentityFile Your-Private-Key-File, such as ~/.ssh/codecommit_rsa or ~/.ssh/id_rsa

您可以从 IAM 控制台获取 Your-SSH-Key-ID。

【讨论】:

确实是这个问题,谢谢!如果我查看 Linux/Mac steps here 而不是尝试翻译 Windows steps here 会更加明显 我依赖于由 sourcetree 创建的配置文件,但它不起作用。一旦我将我的配置文件更改为此它就可以工作了【参考方案2】:

我的情况有点不同。

“安全凭证”选项卡同时具有“访问密钥”和“AWS CodeCommit 的 SSH 密钥”。确保您使用的是 CodeCommit 密钥 ID。

【讨论】:

【参考方案3】:

这有效

Host git-codecommit.us-west-2.amazonaws.com
    User SSHKEYID
    IdentityFile ~/.ssh/id_rsa

【讨论】:

【参考方案4】:

制作git clone时尽量使用sshkey-ID

所以 git clone 应该是这样的:

git clone ssh://<SSHKEY-ID>@git-codecommit.<REGION>.amazonaws.com/v1/repos/<REPO-NAME>

【讨论】:

【参考方案5】:

确保配置文件没有保存为txt文件并使用SSH Key ID,而不是Access

【讨论】:

【参考方案6】:

请遵循 AWS 提供的以下文档

Linux

https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html

Windows

https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-windows.html

我只测试了windows的ssh连接,请按照上面提到的链接测试linux的ssh连接;

以下是在 Windows 10 上为 codecommit 设置 SSH 连接的步骤。

第 1 步

CodeCommit 的初始配置(请参考文档链接)

第 2 步

安装 Git(请参考文档链接)

第 3 步

通过运行以下命令生成 ssh 密钥:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

运行此命令后,它应该在 C:\Usersuser name here.ssh 目录中生成公钥(.pub)和私钥

第 4 步

登录到 aws 管理控制台并转到 IAM-->用户 --> 选择目标用户 --> 安全凭证选项卡 -->AWS CodeCommit 的 SSH 密钥 并单击上传 ssh 密钥。复制粘贴公钥的内容,例如 C:\Users此处的用户名.ssh\id_rsa.pub 并保存更改。但是您可以在使用命令时为您的公钥(id_rsa.pub)选择不同的名称ssh-keygen -t rsa -b 4096 -C "your_email@example.com".

第 5 步:

上传公钥后,复制 SSH 密钥 ID。

第 6 步

在此处创建 C:\Users用户名.ssh\config 文件(没有文件扩展名,在 Windows 中将其保存为 config 并选择所有文件类型选项。Config.txt 很可能不起作用)。 将以下内容粘贴到 C:\Users此处的用户名.ssh\config 文件中:

Host git-codecommit.*.amazonaws.com
  User copy SSH key ID here
  IdentityFile ~/.ssh/copy name of the public key here 
  
Host git-codecommit.*.amazonaws.com
  User THISISEXMAPLE123
  IdentityFile ~/.ssh/id_rsa
  

第 7 步

  git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo

【讨论】:

【参考方案7】:

AWS 核心配置的变化各不相同。您可能会正确完成所有配置,但连接仍然存在问题。直截了当。

尝试将默认的 git url 来源从旧更改为 @git-codecomitxxxxxxxx/v1/repos/xxxxx 确保密钥服务作为存储库的用户所有者

然后再推。

【讨论】:

以上是关于无法使用 SSH 访问 AWS CodeCommit的主要内容,如果未能解决你的问题,请参考以下文章

aws codecommit 代码托管服务使用

在 Gitlab CI 构建中,我无法通过私钥 ssh 进入 AWS EC2

无法访问此站点以获取 AWS Elastic Beanstalk 环境 URL

无法设置到私有 AWS API 网关 API 的 SSH 隧道

aws-vpc 容器无法访问互联网

即使 SSH 工作,AWS 公共 DNS 也不会加载