2013-07-29 2 views
2

원격 서버에서 git pull을 수행하는 fab 스크립트를 작성하고 있지만 패브릭에서 명령을 실행할 때 Permission denied (publickey,keyboard-interactive).이 표시됩니다.패브릭을 사용하여 git 리포지토리에서 사용 권한이 거부되었습니다.

서버에 ssh를 연결 한 다음 끌어 오기를 수행하면 작동합니다.

import fabric.api as fab 
def update(): 
    ''' 
    update workers code 
    ''' 
    with fab.cd('~/myrepo'): 
     # pull changes 
     print colors.cyan('Pulling changes...') 
     fab.run('git pull origin master') 

가 어떻게 그것을 패브릭 작업을합니까 :

가 여기 내 패브릭 작업의 (등, 내가 설치 서버의 키를 이미했습니다, 그래서 암호 문구를 요구하지 않습니다)?

편집 : 내 서버는 Google Compute 인스턴스이며 인스턴스에 ssh에 gcutil 도구를 제공합니다. 이것은 서버에 연결하기 위해 실행되는 명령입니다

이 (가 cdsupervisorgit status 같은 서버에서 명령을 실행할 수 있어요) 스크립트는 서버 AFAICT에 연결할 수, 그냥 git pull
ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /Users/John/.ssh/google_compute_engine -A -p 22 [email protected] 

그 실패합니다.

+0

어떤 사용자가 작업을 수행하여 (따라서 패브릭 아래에)? "권한이 거부되었습니다 ..."git 작업은 authetication이 실패한 증상입니다. –

+0

둘 다 동일한 사용자를 사용하고 있습니다. 패브릭의 호스트는'[John @ server]'이고, ssh 일 때는'John @ server'와 같습니다. – john2x

답변

8

ssh 에이전트 포워드 옵션을 사용하려면 다음과 같이 fabfile을 편집해야합니다.

from fabric.api import * 

env.hosts = ['123.456.789.101'] 
env.user = 'John' 
env.key_filename = '/Users/John/.ssh/google_compute_engine' 
env.forward_agent = True 

def update(): 
    ''' 
    update workers code 
    ''' 
    with cd('~/myrepo'): 
     # pull changes 
     print colors.cyan('Pulling changes...') 
     run('git pull origin master') 
+0

여전히 키를 지정한 후 git에서 오류가 발생합니다. 그것은 서버에 연결할 수 있습니다 ('cd'를 할 수 있었고'supervisor' 명령을 실행할 수있었습니다), 그것은 실패한'git' 일뿐입니다. – john2x

+0

미안하지만, 나는 오해였습니다. SSH 옵션 [-A]는 ssh 에이전트 전달을 의미합니다. 그래서 git pull 명령어 [/Users/John/.ssh/google_compute_engine] 키를 사용하십시오. ssh 에이전트 포워딩을 사용하려면 env 옵션 [env.forward_agent = True]을 활성화해야합니다. – Yuichiro

+0

그게 다야, 고마워! – john2x

관련 문제