2014-12-05 4 views
0

내 RoR 앱이 원격 데이터베이스에 액세스해야합니다 (FWIW는 rds.amazonaws.com에서 호스팅 됨). SSH 터널을 통해서만 액세스 할 수 있습니다.Heroku에서 SSH 터널 설정 : SSH 키 쌍 설치?

로컬 컴퓨터에서 이미 액세스를 테스트했습니다. 나는 동등한를 통해 터널을 설정 해요 :

ssh -f -N -L 3307:longname.rds.amazonaws.com:3306 [email protected]_host.com 

(하지만 난 사실을하고 있어요 방식을 볼 수 https://stackoverflow.com/a/27305457/558639 참조). 여하튼,이 작업을 위해서는 Heroku에 SSH 키 쌍 (개인 및 공용 부분 모두)을 설치해야합니다.

나는 여기에 익숙지 않은 영역에 있습니다. 키를 설치하는 Heroku 세션의 시작 부분에서 시작하는 스크립트를 작성할 수 있습니다. 이것을 달성하고 개인 키를 불필요하게 노출시키지 않는 것이 옳은 방법은 무엇입니까?

답변

0

다음은 내가 생각해 낸 것입니다. (더 긴 설명 SSH tunneling from Heroku을 참조하십시오.)

  1. 는 공개 키와 개인 키를 포함하여 환경 변수의 무리를 설정, heroku config:set NAME1=value1 NAME2=value2 etc...
  2. 은 다음과 같은 내용 .profile.d/web-setup.sh을 만들 사용. https://devcenter.heroku.com/articles/profiled에 따라 .profile.d 디렉토리의 모든 파일은 dyno가 처음 설정 될 때 실행됩니다.

참고 :이 방법 키 민간 SSH는 Heroku가 환경의 구성 변수로 나타납니다. 다른 민감한 정보가 거기에 보관되어 있기 때문에 이것은 비교적 안전한 접근이라고 생각합니다.

.profile.d/web-setup.sh 파일에는 다음이 포함

# file=.profile.d/web-setup.sh 

# create keypair files on this dyno 
echo $0: creating public and private key files 
mkdir -p ${HOME}/.ssh 
echo "${PUBLIC_KEY}" > ${HOME}/.ssh/heroku_id_rsa.pub 
chmod 644 ${HOME}/.ssh/heroku_id_rsa.pub 
# note the use of double quotes to preserve newlines! 
echo "${PRIVATE_KEY}" > ${HOME}/.ssh/heroku_id_rsa 
chmod 600 ${HOME}/.ssh/heroku_id_rsa 

# You may need to preload known-hosts here. See 
# https://stackoverflow.com/questions/21575582/ssh-tunneling-from-heroku/27361295#27361295 
# on how to do that. 

# open a tunnel if not already running 
SSH_CMD="ssh -f -i ${HOME}/.ssh/heroku_id_rsa -N -L ${LOCAL_PORT}:${REMOTE_MYSQL_HOST}:${MYSQL_PORT} ${REMOTE_USER}@${REMOTE_SITE}" 
PID=`pgrep -f "${SSH_CMD}"` 

if [ $PID ] ; then 
    echo $0: tunnel already running on ${PID} 
else 
    echo $0 launching tunnel 
    $SSH_CMD 
fi