2014-12-15 6 views
0

Fabric을 처음 사용하므로 잘못된 검색 용어로 인해 놓친 간단한 답변이있을 수 있습니다.Fabric SSH 설정, 오류 : 시간 초과

AWS에서 새로운 우분투 EC2 인스턴스를 시작한 다음 Fabric으로 연결하고 몇 가지 명령을 실행 해보려고합니다. 그러나 Fabric의 SSH 연결에 문제가있는 것 같습니다. 아마도 일부 env 변수를 잘못 정의하고있는 것입니까? 나는 당신을 적용하려면 새로운 ENV 변수에 대한 새 작업을 필요로 읽을 수 있기 때문에

@task //starts new EC2 instance and sets env variables 
def prep_deploy(): 
    //code to start new EC2 instance, named buildhost 
    env.hosts=[buildhost.public_dns_name] 
    env.user = "ubuntu" 
    env.key_filename = ".../keypair.pem" 
    env.port = 22 

@task 
def deploy(): 
    run("echo $HOME") //code fails here 
    .... 

나는, fab prep_deploy deploy 실행합니다. 나는 퍼티를 통해 연결할 수 있습니다 나는 예를 들어 Fatal error: Timed out trying to connect to ...amazonaws.com (tried 1 time) Underlying exception: timed out

보안 그룹 SSH 열려 있습니다 얻을. 사실, deploy()의 시작 부분에서`env.host_string '변수를 비우면 수동으로 호스트를 입력하라는 메시지가 나타나면 "우분투 @ ... amazonaws.com:22"에 다음과 같이 쓸 수 있습니다. 작업 시작시 출력에서 ​​볼 수있는 것과 정확히 일치하는 호스트 이름이며 인스턴스에 연결됩니다. 하지만 환경 변수를 조작하여 호스트 이름을 이해하는 방법을 파악할 수는 없습니다.

답변

1

변수 사용시 직물 설정이 올바른 것처럼 보입니다. 내 우분투 VM에 연결하기 위해 제공 한 코드를 사용할 수있었습니다. 아마존 인스턴스가 완전히 부팅되지 않고 스크립트가 두 번째 작업을 실행할 때 연결 준비가되어 있지 않기 때문에 연결 문제가 발생하는지 궁금합니다. 나는 다른 VM 호스트에서 그 문제를 겪었다. 다음 코드를 추가하여 연결을 다시 확인하고 시도하십시오. 이것은

import socket 
import time 

def waitforssh(): 
    s=socket.socket() 
    address=env.host_string 
    port=22 
    while True: 
     time.sleep(5) 
     try: 
      s.connect((address,port)) 
      return 
     except Exception,e: 
      print "failed to connec to %s:%s %(address,port) 
      pass 

이 배포 작업

def deploy(): 
    waitforssh() 

이 연결을 테스트해야합니다으로 함수 호출을 삽입 도움이 될 수 있습니다. 포트가 응답하지 않으면 5 초 후에 다시 시도하십시오. 두 번째 연결 시도가 작동하는 이유를 설명 할 수 있습니다.

+0

나는 waitforssh가 작업하기 전에 한 번 실패 했으므로 인스턴스 상태가 "보류 중"에서 "실행 중"으로 변경 될 때까지 기다리기 위해 time (10)을 사용하여 비슷하게 작업을 수행했지만 분명히 충분히 오래 대기하지 않았습니다. 감사. – sybaritic

+0

이것은 또 다른 질문 일 수도 있지만, 지금은 연결하는 동안 사용자 "우분투"로하지 않으므로 내 인스턴스가 "root"사용자가 아닌 "우분투 사용자"로 로그인하십시오. 여전히 일부 환경 문제와 관련이있는 것 같지만 사용자가 꽤 명확하게 표시되어있는 것처럼 보입니다 .... 같은 코드 – sybaritic

+0

이 오류 메시지는 waitforssh() 또는 deploy() 코드에서도 발생합니까? – grag42