我正在从userdata启动一个ec2实例,我需要用我的ansible playbooks克隆一个repo,但它无法克隆。详见下文。有人能帮我弄清楚吗。当我在引导后ssh到实例时,clone可以工作,但不能在引导时工作。
#!/usr/bin/env bash set -x exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 cd /home/ec2-user mkdir -p .ssh ssh-keygen -b 2048 -t rsa -f /home/ec2-user/.ssh/codecommit -q -N "" KEY_ID=`aws iam upload-ssh-public-key --user-name ${user_id} --ssh-public-key-body "$(cat /home/ec2-user/.ssh/codecommit.pub)" \ --query 'SSHPublicKey.SSHPublicKeyId' --output text` echo -e " Host git-codecommit.*.amazonaws.com User $KEY_ID IdentityFile /home/ec2-user/.ssh/codecommit " >> /home/ec2-user/.ssh/config ssh-keyscan -t rsa git-codecommit.us-east-2.amazonaws.com >> /home/ec2-user/.ssh/known_hosts sudo chown -R ec2-user:ec2-user /home/ec2-user/.ssh sudo chmod 700 /home/ec2-user/.ssh sudo chmod 644 /home/ec2-user/.ssh/* sudo chmod 600 /home/ec2-user/.ssh/codecommit* eval "$(ssh-agent -s)" export GIT_SSH_COMMAND="ssh -v -F /home/ec2-user/.ssh/config -o StrictHostKeyChecking=no" export GIT_TRACE_PACKET=true export GIT_TRACE=2 export GIT_CURL_VERBOSE=1 **sleep 60s** git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/ansible
在git clone命令执行之前添加60秒的睡眠时间。SSH密钥上传似乎需要一段时间才能激活。
sleep 60s git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/ansible
或者
for i in {1..30}; do git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/ansible [ $? == 0 ] && break || sleep 2s; echo "keep trying ..." done