2012-09-10 4 views
1

우리는 SSH-Keygen은을 사용하여 암호없이 원격 컴퓨터에 연결할 수있는 방법이있다. (의 컴퓨터 A와 B라고하자), 두 개의 컴퓨터가 내 문제에ssh가 암호로 암호를 묻는 지 확인하는 방법은 무엇입니까?

(추가 정보를 원하시면 this보고) 및 컴퓨터 A는 ssh 암호없이 컴퓨터 B를 연결할 수 있습니다. 컴퓨터 B의 IP 주소가 바뀌었을 때 (그러나 새 IP가 실제로 속한 지 알 수 없습니다.) known_host 파일을 이전 ip를 새 것으로 교체하는 것으로 편집하고 있습니다. 새 IP가 실제로 컴퓨터 B에 속하면 컴퓨터 A는 암호없이 계속 연결할 수 있으므로 아무런 문제가 없습니다. 그러나 새로운 IP가 컴퓨터 B에 속하지 않으면 ssh는 컴퓨터 B를 연결하기 위해 암호를 묻습니다.

위의 모든 진행은 파이썬 코드에 의해 수행되므로 SSH는 암호를 기다리고 있으며 컴퓨터 연결을 시도하면 프로그램이 실행을 멈추고 있습니다. B. 내가하려고하는 것은 ssh가 암호를 입력하지 않고 암호를 묻는 지 확인하는 것입니다.

ssh 옵션이 있습니까? 아니면 다른 방법이 있습니까?

+1

사용 paramiko 오히려 commands''를 통해 SSH를 호출하는 것보다 (어떤 경우에 년간 사용되지되어있는 ...) – geoffspear

답변

1

ssh 맨 페이지를 읽은 후 나는 PasswordAuthentication 옵션을 발견했습니다. 그것 같이 사용됩니다

import commands 
ret,out = commands.getstatusoutput("ssh -n -o PasswordAuthentication=no "+username+"@"+ip) 
if ret == 0: 
    #success 
else: 
    #fail 

연결에 암호가 필요하면 실패합니다.

2

파이썬 pexpect 모듈을 사용하면이 작업을 수행 할 수 있습니다.

예 :

import pexpect 

ssh_new_key = "Are you sure you want to continue connecting" 

cmd_connect = "ssh -p22 %[email protected]%s" % (account_name, host) 

try: 

    p = pexpect.spawn(cmd_connect) 

    i = p.expect([ssh_new_key, 'asswor']) 

    if i == 0: 
     p.send('yes\r') 
     i = p.expect([ssh_newkey, 'assword:']) 

    if i == 1: 
     p.send(account_pwd) 

except Exception, exp: 
    print = "Could not connect to %s with account %s" % (host, account_name) 
관련 문제