이 튜토리얼에서 막혔습니다:
https://oncletom.io/2016/travis-ssh-deploy/
내 .travis.yml
코드:
language: ruby
sudo: false
rvm:
- 2.2
env:
global:
- domain: <..>
- site_path: <..>
addon:
ssh_known_hosts: <..>
before_script:
- npm install -g bower
- bower install
script: bundle exec jekyll build
before_deploy:
- openssl aes-256-cbc -K $encrypted_<..>_key -iv $encrypted_<..>_iv -in deploy/deploy_key.enc -out /tmp/deploy_key -d
- eval "$(ssh-agent -s)"
- chmod 600 /tmp/deploy_key
- ssh-add /tmp/deploy_key
deploy:
provider: script
skip_cleanup: true
script: "./deploy/deploy.sh"
on:
branch: master
내 결과:
$ openssl aes-256-cbc -K $encrypted_<..>_key -iv $encrypted_<..>_iv -in deploy/deploy_key.enc -out /tmp/deploy_key -d
$ eval "$(ssh-agent -s)"
Agent pid 2583
$ chmod 600 /tmp/deploy_key
$ ssh-add /tmp/deploy_key
Enter passphrase for /tmp/deploy_key:
Done: Job Cancelled
즉, 시간 초과로 인해 작업이 취소되었습니다. 비밀번호 없이 키를 다시 생성하면 다음 오류가 발생합니다.
# <..> SSH-2.0-OpenSSH_7.5
|1|<..>
Creating public keys..
copying site to <..>...
Warning: Permanently added the RSA host key for IP address '<..>' to the list of known hosts.
deploy@<..>'s password:
No output has been received in the last 10m0s, this potentially indicates a stalled build or something wrong with the build itself.
Check the details on how to adjust your build configuration on: https://docs.travis-ci.com/user/common-build-problems/#Build-times-out-because-no-output-was-received
The build has been terminated
따라서 웹사이트를 배포할 수 없습니다. 그렇다면 질문은 왜 비밀번호와 비밀번호에 갇혀 있습니까? SSH 키를 설치하면 암호 문구와 비밀번호를 제거하는 것이라고 생각했습니까?
아래는 관련 스크립트입니다.
deploy.sh
#!/usr/bin/env bash
set -e
if [ ! "env:$TRAVIS_BRANCH" == "env:master" ]; then
echo not on master, not deploying
exit 0
fi
echo "on master ✓"
if [ -z "$domain" ]; then
echo "domain" variable not set
exit 1
fi
echo "domain: $domain ✓"
if [ -z "$site_path" ]; then
echo "site_path" variable not set
exit 1
fi
echo "site path: $site_path ✓"
echo "zipping _site to site.zip..."
(cd _site/ && zip -r - .) > site.zip 2>/dev/null
echo "Check if public key of the server is in known_hosts"
if [ -z `ssh-keygen -F $domain` ]; then
ssh-keyscan -H $domain | tee -a ~/.ssh/known_hosts
echo "Creating public keys.."
fi
echo "copying site to $domain..."
scp -i /tmp/deploy_key site.zip deploy@$domain:~/site.zip
ssh -i /tmp/deploy_key deploy@$domain 'rm -rf "'$site_path'"/* && unzip ~/site.zip -d "'$site_path'" && rm ~/site.zip'
답변1
예, 매우 오래된 질문이라는 것을 알고 있습니다 :) 하지만 최근에 몇 가지 문의를 받았으며 효과적인 해결책을 찾을 수 있습니다.
before_install:
- [...]
- chmod 600 ssh.key
- chmod 700 local-ssh-askpass
- eval `ssh-agent -s`
- DISPLAY=1 SSH_ASKPASS_REQUIRE=force SSH_ASKPASS=./local-ssh-askpass ssh-add ssh.key < /dev/null
당신은:
- 로컬 쿼리 스크립트를 강제하려면 DISPLAY=1을 추가하세요.
- /dev/null에서 입력 리디렉션
일반적으로 Travis는 이 키를 수락하고 에이전트에 추가할 수 있습니다.