我发现了很多问题和教程,最后才把这些都放在一起。想把它记录下来,这样别人就可以省下很多时间的沮丧。
我试图在BitBucket上获得一个私人git存储库,使用部署密钥与Spring Boot Config Server一起工作,并在Docker中运行。我遇到了很多问题。
我似乎不知道我应该把SSH信息放在哪里。所有教程似乎都是针对https的。
我一直收到一个错误,私钥无效。
似乎有几种方法可以使这项工作,但只有一种对我有效。
请原谅,但这是谷歌(从SO)上的#1结果,当配置服务器部署到具有短暂文件系统的环境时,搜索如何使用Git repos进行SSH身份验证-我相信我有找到了这样做的方法。以下是我目前为实现我的客户所做的工作的要点。
https://gist.github.com/hanserya/43b00162741fa3022481301db60e8acd
这绝对是一只丑小鸭,但它很实用,应该成为任何需要它的人的坚实基础。使用此实现,您将能够将卷装载到运行配置服务器的容器中。然后,只需将环境配置为使用卷作为spring的SSH目录。云配置。服务器吉特。通过任何最适合您的介质(env变量、bootstrap.yml等)设置sshLocation配置密钥
快乐编码!
我想在此基础上添加一个进一步的改进,希望能够消除在YAML文件(或env变量)中乱用SSH键的需要,这通常是个坏主意。
这是围绕SSH配置文件展开的,因此如果应用程序无法访问它,或者无法修改它,那么这将不起作用(但我想不出任何实际情况会适用于此,包括云部署:AWS Cloudformation模板或Kubernetes ConfigMaps将提供有用的解决方法)。
这个问题(在很大程度上)围绕着不能在Spring配置应用程序属性中指定私钥文件这一限制(相当令人费解)。
在您的~/. ssh/config
文件中,您可以添加以下内容:
Host git-config
HostName github.myserver.example.com
User someone
IdentityFile /path/to/private_key
(我需要连接到私有GitHub企业服务器,并且与SSH密钥相关联的用户与正在运行的应用程序服务器不同:这很好;如果不是这样,只需对主机名使用GitHub.com
,并省略用户
)
然后,不是使用实际的GitHub URI,而是像这样:
git@github.myserver.example.com:我的团队/配置属性演示。git
为主机替换git config
:
spring:
cloud:
config:
server:
git:
uri: git@git-config:my-team/config-properties-demo.git
strictHostKeyChecking: false
它确实有点麻烦,但相对容易自动化。一个更好的选项是Spring Config添加另一个指向私钥材质的选项:
spring:
cloud:
config:
server:
git:
uri: git@github.myserver.example.com:my-team/config-properties-demo.git
user: someone
private_key_file: /path/to/private_key
strictHostKeyChecking: false
我想这是“增强请求”部分的一个...
第一部分是配置。您希望忽略标准私钥,并使用作为环境变量提供的私钥。(SSH_密钥)。此外,git回购协议是一个EV(git_URL),但如果需要,可以硬编码。
spring:
cloud:
config:
server:
git:
uri: ${GIT_URL}
ignore-local-ssh-settings: true
private-key: ${SSH_KEY}
第二部分很棘手。对于Dev,您需要内联键,因此需要在YAML中使用管道作为块的前缀。(注意,这个键是丢弃的,就像我刚刚生成的一样,现在已经丢弃了它)
private-key: |
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAszmCR06LVHk/kNYV6LoYgEfHlK4rp75sCsRJ7rdAbWNED+yB
bneOm5gue0LGIhT7iTP9D7aN6bKVHv1SBconCA7Pa2NMA9epcMT5ecJc8ndpZOFn
iqM77jmMMPvj8EIC06w5oK5zoYwpGotYQFHllf8M+20HtW2fZdPYAYwLcVdmc5tI
vLoS+10qw5D3X9zrwk2Cbt37Iqnz1cHOQq+g7sxgVgt18aIKKeg0JslaGqSlWMoT
ICUMHj89E4BMHj8ND8otSXHL+VhN+ghd7w1MpckxLWBsNs1+G1FuiJEVAtRq/j+8
SOilxgifvI1LqpZ5kO01XFlmkcuN4NMT03qpcwIDAQABAoIBAB5oQGk2sz7mv1kk
aV0tzaBeDUd1cWSpUw1UljKRFrY4ZEDLYH5MfH57iE9TWehIZRC3KFU1JMikitZS
JktjK9IbKSfQFgKE4XOHh8gXqMteZRw/feCwpydYzic1ZUvK903QZ4qSbn3XGNYv
FA79lhUny50Qt4EZkzSkh35js0FMSR9VmyXENxN6IgXUZyoaNAATr44Vkd488BY2
7PvdOniemo8/8p4Ij0Aq9Q7rOtm77ZXjyFRX5mDTi2ndSllMEhVcWXHSii+ukbvF
117Ns+8M7VWroNfRzI+Ilm/Xz/ePOLlNoYcY0h5+QM9vMPTX9Cpl5WofgOMK1sKd
mSdI4ukCgYEA12kcu0aDyIrEPHcyaT9izSFply0Uon2QKS9EQn6cr83vaEGViamh
f5q1coYouGnsLfbgKolEMKsYtbmJvInPFDCdc2x0Fmc207Wp1OECsN+HwElEXkrs
uPDpGQgs5odjN5Grue9837920oG3UBBdVDAKly2dTOcvoWW+88seFSUCgYEA1P7f
p78HDMQ8zTy5+3Rd4+lmJjPsY618XxSQ80j8Elrhi/DyTMA0XGc5c3cKRPmSj+JD
GN34WQbw7JO2mKM7YJs+tkSBeTKce8F3cZQy1jy3LNHCtfXylOxmxOFKynV5h2b/
jno+pGdmAPK5yvnGASd2eujtzt+AL07XiD2LnLcCgYEAsFRz131WfP/SuShdlLf1
WbODKuQVIxojuwLdHo1kF6k805v0G/dGoxzycOgPRz41vj57q3Yn4qr8FC3n6PTq
FT3idUyPDpO41r67Ye469KxWBHo1Q/aTJqTWOs5tatvixOcyqoa3MrUZQCI8+4YZ
z8Nvt+b3/66zV6vhDtHzMx0CgYAvWW2M0+mUS/ecRHivzqGkrdkYewh87C8uz9qd
SsdGqU9kla63oy7Ar+3Unkz5ImYTeGAkIgw4dlOOtBOugPMNOdXKHRaPQ9IHrO2J
oUFf4OVzoDnhy4ge1SLPd6nxsgXPNPVwzfopABdr9Ima9sWusgAjuK5NA+ByI9vE
HLJxpwKBgQCTM938cdx457ag1hS6EaEKyqljS1/B8ozptB4cy3h0hzw0crNmW84/
1Lt9MJmeR4FrWitQkkVLZL3SrYzrP2i+uDd4wVVD5epvnGP/Bk6g05/eB9LgDRx/
EeBgS282jUBkXZ6WpzqHCcku3Avs3ajzsC1WaEYx0tCiBxSkiJlaLQ==
-----END RSA PRIVATE KEY-----
在生产方面,在将密钥传递给运行容器的Docker命令之前,需要在命令提示符处使用bash变量来存储密钥。示例:
$ pem=$( cat path_to_key )
$ docker run -e "SSH_KEY=$pem" configserver
在这一点上,你应该有应用程序照顾。现在,您所需要的就是绕过ssh主机不可信的问题。为此,在Dockerfile中添加这些行。用你想要的任何主机替换“bitbucket.org”。这些命令创建ssh配置目录,修复权限,然后创建并填充已知主机文件。
RUN mkdir -p /root/.ssh
RUN chmod 700 /root/.ssh
RUN ssh-keyscan bitbucket.org > /root/.ssh/known_hosts
问题内容: 在最终将所有内容组合在一起之前,我发现了许多问题和教程。想要记录下来,这样其他人可以节省很多时间的挫败感。 我正在尝试在BitBucket上获得一个私有git存储库,以使用部署密钥与Spring Boot Config Server一起使用,并使其在Docker中运行。我遇到很多问题。 如何使用application.yml文件进行实际配置。 我似乎无法弄清楚应该在哪里放置SSH信息。
问题内容: 我有一个应用程序可以使用Git执行各种有趣的操作(例如运行git clone和git push),而我正在尝试对其进行docker-ize。 我遇到了一个问题,尽管我需要能够向容器中添加SSH密钥以供容器“用户”使用。 我尝试将其复制到,进行更改,创建了一个git ssh包装器,但还是没有运气。 这是Dockerfile供参考: 运行git命令,如 问题答案: 原来使用Ubuntu时,
问题内容: 我正在尝试使用GitHub托管存储库(使用Jenkins Git插件)启动Jenkins并使其运行。该存储库具有多个git子模块,因此我不确定我是否想尝试和管理多个部署密钥。 我的个人GitHub用户帐户是我希望与Jenkins进行的每个项目的合作者,因此我在其中生成了一个SSH密钥并将其添加到我的个人GitHub帐户中。 但是,当我尝试将存储库URL添加到我的Jenkins项目配置中
我正在尝试让Jenkins启动并运行一个GitHub托管的存储库(使用Jenkins Git插件)。存储库有多个git子模块,所以我不确定是否要尝试管理多个部署密钥。 我的个人GitHub用户帐户是我希望与Jenkins合作的每个项目的合作者,因此我在并将其添加到我的个人GitHub帐户。 但是,当我尝试将存储库URL添加到我的Jenkins项目配置时,我会得到: 同样,当我计划构建时,我得到:
我已经在我的Windows 7机器上创建了一个公钥和私钥到我的Git服务器,当我在Windows中使用Tortoise Git时,我可以成功使用它。 我现在只想在命令行上使用它,但无法让它工作,因为msysGit没有获取我的ssh密钥。 有人能帮我介绍一下如何帮助mysysGit捡起我存储在。。。 我在网上看到一条帖子,建议把它放在 可能有帮助,但没有。 谢谢
我下载并安装git从:https://git-scm.com/downloads.我现在可以在Windows命令提示符上使用git。 我下载了puttygen并用它生成了一对RSA密钥,存储在 我将公钥添加到我公司的git网站。 现在,我如何告诉git使用我刚刚创建的rsa密钥?