gpt4 book ai didi

ruby-on-rails - 如何使用 ruby​​-git gem 在 SSH key 之间切换?

转载 作者:行者123 更新时间:2023-12-05 05:52:08 26 4
gpt4 key购买 nike

有什么方法可以将不同的 SSH key 设置为 ruby-git动态 gem 配置,以便我可以使用不同的私有(private)存储库?

我所做的工作很好,但它只适用于一个 SSH key 。

我在我的 Rails 应用程序的根文件夹中创建了 /ruby_git.sh:

#!/bin/bash
exec /usr/bin/ssh -o StrictHostKeyChecking=no -i ./certs/private_key "$@"

我已经用我的 SSH key 创建了 /certs/private_key:

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

我已经创建了/initializers/git_init.rb:

Git.configure do |config|
config.git_ssh = Rails.root.join("ruby_git.sh").to_s
end

我也尝试过另一种方法,在运行时为每个 repo 创建自定义 sh 脚本和 SSH 私钥文件,并在使用后删除它们。但这似乎全局改变了 Git,所以下一个线程/ session 继承了新的 Git 配置:

# @repo_id, @ssh_url and @private_key are instance variables set
# based on the repo that we try to interact with

cert_path = Rails.root.join("git_config", "certs", @repo_id).to_s
config_path = Rails.root.join("git_config", "configs", "#{@repo_id}.sh").to_s
git_config = "#!\/bin\/bash\n\nexec \/usr\/bin\/ssh -o StrictHostKeyChecking=no -i #{cert_path} \"$@\""

File.open(config_path, "w") { |f|
f.write(git_config)
}

File.open(cert_path, "w") { |f|
f.write(@private_key)
}

File.chmod(0755, config_path)
File.chmod(0600, cert_path)

Git.init

Git.configure { |config|
config.git_ssh = config_path
}

Git.ls_remote(@ssh_url)

FileUtils.remove_entry(cert_path)
FileUtils.remove_entry(config_path)

我尝试使用 ~/.ssh/config。以下是有效的,但它不能满足我的需求。

Host github.com
PreferredAuthentications publickey
IdentityFile /home/ubuntu/.ssh/repo_1_private_key

我正在处理多个存储库。为他们每个人创建的 SSH 对。用作部署 key 的公共(public)部分。没有用户。

我需要衡量一个存储库/ key 对与另一个存储库/ key 对的关系,并且不允许 ssh 访问其他 key 或遍历它们。

有点像

Host github.com/organization_1/repo_1
PreferredAuthentications publickey
IdentityFile /home/ubuntu/.ssh/repo_1_private_key

Host github.com/organization_2/repo_2
PreferredAuthentications publickey
IdentityFile /home/ubuntu/.ssh/repo_2_private_key

不工作,因为 github.com/organization/repo 不与 github.com 主机匹配,并且在尝试 git clone git 时跳过配置@github.com:organization/repo.git.

最佳答案

您是否尝试放置 ssh 配置文件并指定要连接的主机?

我没有处理过 ruby​​ 脚本。我已经处理过 ssh 足以处理此类事情。有一个 ssh 配置文件可以帮助我解决此类用例。它是 ~/.ssh/config

在您的用例中,您能否尝试进行如下设置,

Host myfriendlyhostname1
HostName git.example.com
User user1
Port 1234
IdentityFile ~/.ssh/id_rsa1

Host myfriendlyhostname2
HostName git.example.com
User user2
Port 1234
IdentityFile ~/.ssh/id_rsa2

这是做什么的,如果将上面的内容放在 ~/.ssh/config 文件中,这将映射配置的名称以选择连接

In your case, I assume you have same host different credentials right?

如果您ssh myfriendlyhostname1,它将使用为user1 提供的身份连接到git.example.com

如果您ssh myfriendlyhostname2,它将使用为user2 提供的身份连接到git.example.com

搜索时,我发现这个链接有更多示例,https://linuxize.com/post/using-the-ssh-config-file/

我没有尝试过的是 git clone using myfriendlyhostname1如果您尝试过,请告诉我结果如何。

关于ruby-on-rails - 如何使用 ruby​​-git gem 在 SSH key 之间切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70272458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com