2012-10-11 3 views
0

암호가없는 ssh 연결을 설정하기 위해 bash 스크립트에서 사용하는 다음과 같은 expect 명령이 있습니다.bash 표현식에 오류가 있습니다.

VAR=$(expect -c ' 
    spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB [email protected]$REMOTE_HOST_IP "' 
    expect "*?assword:*" 
    send "'"$REMOTE_HOST_PASSWD"'\r"; 
    expect { 
    "Permission denied, please try again." { 
     exit '"$WRONG_PASSWORD"' 
    } 
} 
') 

내가? "assword :"로 암호 문자열을 기대하고 내가 대한 쓰기 어떤 password.But을 보내기 위해 내가 그것도 작동

expect "xxxx" 
expect "yyyy" 

쓰기 works.if을 차단 기대 , 그래서 나는 그 블록에 들어 가지 않는다고 생각한다. 해결책은 무엇인가?

답변

1

일치하기 전에 스팀이 끝나거나 타임 아웃이 발생할 수있다. 일치하는 항목이 없더라도 expect가 반환되고 실행이 계속되어 암호가 전송됩니다.

VAR=$(expect -c ' 
    spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB [email protected]$REMOTE_HOST_IP "' 
    expect "*?assword:*" { 
     send "'"$REMOTE_HOST_PASSWD"'\r" 
    } 
    expect { 
    "Permission denied, please try again." { 
     exit '"$WRONG_PASSWORD"' 
    } 
} 
') 

다음 예상 매뉴얼에서

COMMAND에서, 우리는 expect 명령을 설명하는 섹션입니다 :의 몸을 기대에

waits until one of the patterns matches the output of a spawned process, a 
specified time period has passed, or an end-of-file is seen. 

는이 문제를 해결하기를, 당신은 전송 코드를 삽입한다 희망이 =)

관련 문제