2011-10-11 3 views
1

기대를 통해 간단한 작업을 수행하려고합니다. Linux VM에서 "ssh-keygen"명령을 사용하여 ssh 키를 만들고 싶습니다. 내 기대 이하 코드는 곧은 것 같지만 작동하지 않습니다.스크립트 문제가 있습니다.

#!/usr/bin/expect 

spawn ssh-keygen -t rsa 
expect -exact "Enter file in which to save the key (/root/.ssh/id_rsa): " 
send -- "\r" 
expect -exact "Enter passphrase (empty for no passphrase): " 
send -- "\r" 
expect -exact "Enter same passphrase again: " 
send -- "\r" 

암호 구문을 사용하고 싶지 않습니다. 따라서 "Enter"키 동작에 대해 "\r"을 입력하십시오. "#!/usr/bin/expect -d"으로이 코드를 실행 해 보았습니다. 언급 한 문자열과 일치하지 않습니다. 아래처럼 :

... 
expect: does "" (spawn_id exp6) match exact string "Enter file in which to save the key (/root/.ssh/id_rsa): "? no 
.... 

그래서 패턴과 일치 할 수 없으므로 내 스크립트가 실패합니다. 질문은 왜 패턴을 일치시킬 수 없는지입니다. "-exact"을 사용하고 있는데도 여전히 일치하지 않습니다. "-re"으로 놀려고했지만 TCL 정규식이 좋지 않다고 생각합니다.

도와 주시겠습니까? 감사합니다. .

답변

1

스폰 된 프로그램이 보다 정확히 일치하는 것을 출력하려고합니다.. 그래서 정규식 일치가 도움이됩니다.

이 시도 :

spawn ssh-keygen -t rsa 
expect -re {Enter file in which to save the key (/root/.ssh/id_rsa): $} 
send -- "\r" 
expect -re {Enter passphrase (empty for no passphrase): $} 
send -- "\r" 
expect -re {Enter same passphrase again: $} 
send -- "\r" 
+0

감사합니다. 글렌, 당신은 정규 표현식 부분에 맞았 어. 그것은 패턴 매칭을 위해 작동했지만 expect 명령의 디버그는 일치하지 않는 패턴을 보여줍니다. 내 스크립트가 작동하는 한 디버그는 신경 쓰지 않습니다. 고맙습니다. –

1

난 당신이 신속하게에 종료 것 같아요. 이 하나의 작품 :

#!/usr/bin/expect 

spawn ssh-keygen -t rsa 
expect "Enter file in which to save the key (/root/.ssh/id_rsa): " 
send "\r" 
expect "Enter passphrase (empty for no passphrase): " 
send "\r" 
expect "Enter same passphrase again: " 
send "\r" 
expect 
+0

Dimitre, 고맙습니다. 너무 일찍 나가고있었습니다. 나는 결코 그것을 깨닫지 못했다. 너의 글렌과 글렌의 제안을 따랐을 때 필자의 스크립트는 완벽하게 작동하고있다. 두 분 모두에 감사드립니다. –

관련 문제