我工作的公司最近已经开始使用Concourse来满足我们所有的CI需求。目前,我的工作之一是包含一个脚本的任务,scp和ssh在我们的aws ec2实例中并配置这些服务器。然而,我遇到的问题是如何将ssh的私钥输入到这些实例中。这里讨论的一种方法(https://concourse-ci.org/fly-set-pipeline.html)是通过变量传递密钥。在我的脚本中,我使用传入的变量并将其回显到一个新的.pem文件中,并将权限设置为600。当我只回显变量,然后猫新的.pem文件时,它们看起来与原始的.pem文件完全一样。我试图从ssh中获取的容器是标准的ubuntu坞映像。
当我试图使用这个文件来scp和ssh时,我会遇到输入密码的提示。如果我尝试使用原始文件执行ssh,则根本得不到这个提示。我遗漏了什么吗?我非常希望对这一问题有一些见解。
pipeline.yml
jobs:
- name: edge-priceconfig-deploy
plan:
- aggregate:
- get: ci-git
- get: pricing-config
trigger: true
- task: full-price-deploy
file: ci-git/ci/edge/edge-price-config-task.yml
params:
USER_AND_SERVER: {{edge_user_and_server}}
DEPLOY_KEY_PAIR: {{deploy_key_pair}}task.yml
---
platform: linux
image_resource:
type: docker-image
source: {repository: ubuntu}
inputs:
- name: ci-git
- name: pricing-config
run:
path: ./ci-git/ci/edge/edge-priceconfig-deploy.shtask.sh
#!/bin/bash
touch DeployKeyPair.pem
echo $DEPLOY_KEY_PAIR
echo $DEPLOY_KEY_PAIR > DeployKeyPair.pem
cat DeployKeyPair.pem
apt-get update && apt-get -y install sudo
sudo apt-get -y install openssh-client
sudo chmod 400 ci-git/key/DeployKeyPair.pem
sudo chmod 600 DeployKeyPair.pem
mkdir company-price-config-edge
mv pricing-config/fsconfig/conf/com.company.api.v1.pricing/*.xlsx company-price-config-edge/
commandstr="sudo rm -f /etc/company/edge/fsconfig/*xlsx; \
ls -l /etc/company/edge/fsconfig; \
sudo mv /home/ec2-user/company-price-config-edge/*xlsx /etc/company/edge/fsconfig/; \
sudo rm -rf /home/ec2-user/company-price-config-edge;"
scp_link="$USER_AND_SERVER:/home/ec2-user/"
scp_link="$(echo $scp_link | tr -d ' ')"
echo $scp_link
sudo echo -ne '\n' | scp -r -oStrictHostKeyChecking=no -i DeployKeyPair.pem company-price-config-edge $scp_link
sudo ssh -oStrictHostKeyChecking=no -i DeployKeyPair.pem $USER_AND_SERVER $commandstrcredentials.yml
username: |
username
password: |
password
access_token: |
token
ci_scripts_github: |
ci-script-link
edge_user_and_server: |
server.com
staging_user_and_server: |
staging
training_user_and_server: |
training
production_user_and_server: |
production
deploy_key_pair:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----发布于 2017-06-02 20:31:59
今天也遇到了同样的问题,我花了一点时间才弄清楚到底是怎么回事。
您将私钥指定为多行yaml属性,但当它被回显到文件中时,它将去掉换行并用空格替换它们,因此您的密钥是一个大的单行文件。
我不得不使用sed来用换行符替换这个空间,这样它才能正常工作。
echo $DEPLOY_KEY_PAIR | sed -e 's/\(KEY-----\)\s/\1\n/g; s/\s\(-----END\)/\n\1/g' | sed -e '2s/\s\+/\n/g' > DeployKeyPair.pem
第一个sed命令使用两组替换组,它们都具有相同的用途。
First组-抓取标题文本并将其拆分为新行
s/\(KEY-----\)\s/\1\n/g
\(KEY-----\)将标头块的最后一部分放在捕获组中。\s匹配空白/1\n/g将捕获组(#1)放回,然后添加一个换行符/g不必要的全局捕获第二 sed组也这样做,但是占用页脚文本的空间和第一部分,将其放在新行上。
第三组对空白进行全局替换,并将其替换为换行符。这必须是一个单独的命令,所以第一个命令的处理就完成了,然后是一个3行文件/流。
'2s/\s\+/\n/g'
2s/只在第2行执行替换操作\s\+匹配任何空格\n/g全局匹配发布于 2017-05-17 17:30:33
两件事。
第一:您需要声明任务正在使用这些特定的环境变量。
task.yml
---
platform: linux
image_resource:
type: docker-image
source: {repository: ubuntu}
inputs:
- name: ci-git
- name: pricing-config
params:
USER_AND_SERVER:
DEPLOY_KEY_PAIR:
run:
path: ./ci-git/ci/edge/edge-priceconfig-deploy.sh第二:我认为您需要向您的|文件中添加一个credentials.yml。
credentials.yml
deploy_key_pair: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----发布于 2018-05-04 09:57:09
您还可以使用keystore集成(例如,redit集线器)和汇合。
请参阅https://docs.pivotal.io/p-concourse/credential-management.html
https://stackoverflow.com/questions/44030654
复制相似问题