2012-03-01 3 views
2

우리 회사는 생산 시스템에 액세스하기 위해 ssh (One Time Password)를 통한 OTP를 사용합니다. 상호 작용은 다음과 같을 수 있습니다.스크립트에서 otp로 ssh 호출

$ ssh prod 
otp-md5 942 st9621 extResponse: 

이 시점에서 나는 SSH에서 얻은 정보를 사용하여 OTP 응답을 생성하는 Java 프로그램을 실행합니다. 참고 : ssh 출력 (이 예제에서 "942 st9621")의 해시는 입력으로 명령 벨로우즈로 전달되어야합니다. 이 해시는 ssh가 변경 될 때마다 바뀝니다.

$ java -jar jop.jar 942 st9621 <password> 
LAD DARN BHOY TEST ACHE JUTE 

는 지금은 잘라 다른 콘솔 창에 생성 된 OTP ("LAD DARN BHOY TEST ACHE 황마")를 붙여 넣습니다.

모든 것을 분명히하기 위해서 : ssh 명령에서 생성 된 데이터 조각은 jop을 내 암호와 결합 할 때 사용되어야하며 결과는 여전히 실행중인 ssh 명령으로 다시 전달됩니다.

이 과정을 자동화하고 싶습니다. 기본적으로 호스트 이름을 취하고 암호를 묻고 ssh를 호출하고 oop-md5 코드를 jop으로 전달한 다음 OTP를 다시 ssh로 전달하는 bash 스크립트를 가지고 있습니다. 좋은 점은 이 아니라이 명령 행 인수로 내 암호를 입력해야하므로 명령 기록에 저장되며 큰 보안 문제입니다.

이것이 가능합니까?

+0

당신은 정말 당신이 모든 자동화하려면 대신 OTP의 SSH 키를 사용하는 것이 좋습니다. – ThiefMaster

+0

그래, 난 셋업에 대한 통제권이 없어. 나는 으스스하고 웃는 얼굴에 들려고 애쓰는 저조한 사람입니다.). – oneself

답변

1

이것은 글렌 잭맨에 ​​의해 게시 우수한 대답을 기반으로합니다

#!/usr/bin/env expect 

# Get host from command line 
set host  [lindex $argv 0] 

# Read password from the user 
send_user "Password: " 
# Turn off echo to hide password 
stty -echo 
expect -re "(.+)\n" 
set password $expect_out(1,string) 
# Turn echo back on 
stty echo 

# SSH into server 
spawn ssh "$host" 
expect -re {otp-md5 ([^ ]+) ([^ ]+) extResponse: *$} { 
    set otp [exec java -jar jop.jar $expect_out(1,string) $expect_out(2,string) "$password"] 
    send_user "\n$otp" 
    send -- "$otp\r" 
} 
interact 
0

당신은 SSH와 상호 작용 expect 한 번 봐 걸릴 수 있습니다 감사합니다.

1

테스트되지 않음. optssh.exp <password>

아직 검증되지 않은 업데이트에 응답 :는 기대 스크립트는 그런를 사용하는 거라고 뭔가

#!/usr/bin/env expect 
set otp [exec java -jar jop.jar 942 st9621 [lindex $argv 0]] 
spawn ssh prod 
expect -re {extResponse: *$} 
send -- "$otp\r" 
interact 

처럼 될 수 있습니다.

#!/usr/bin/env expect 
spawn ssh prod 
expect -re {otp-md5 ([^ ]+) ([^ ]+) extResponse: *$} { 
    set otp [exec java -jar jop.jar $expect_out(1,string) $expect_out(2,string) [lindex $argv 0]] 
    send -- "$otp\r" 
} 
interact 
+0

나는 나의 질문을 명확히했다. 이 예제에서는 md5 해시 ("942 st9621")입니다. 그것은 "ssh"에 대한 호출에서 올 필요가 있습니다. – oneself

+0

감사합니다. 이것은 정말 좋은 출발점입니다. 나는 그것을 개발하고 테스트 된 솔루션을 게시 할 것이다. – oneself