bash를 사용하여 원격 서버에 ssh 및 ping을 수행할 것으로 예상됩니다.

bash를 사용하여 원격 서버에 ssh 및 ping을 수행할 것으로 예상됩니다.

코드를 개발 중입니다. 서버에서 Spawn을 사용하여 서버 B와 SSH 세션을 설정한 다음 서버 B에서 서버 C로 파일을 SFTP로 전송합니다. 서버 A와 B는 이전 사용자 구성에 따라 암호가 없거나 암호가 필요할 수 있습니다. 아래 코드를 찾으십시오.

 #!/bin/bash
 /usr/bin/expect <<EOD
 lassign $argv 1 2 3 4 file1 file2
 spawn ssh -oStrictHostKeyChecking=no root@$1
 sleep 2
 expect {
 "#" {
 send_user "successfully logged in!\r"
     }
 "Password:" {
  send "$2\r"
   }
 }
 EOD
 sleep 3
 pinging=$( ping $3 -w1 | head -n 2 | grep -i time )
 if [[ $pinging == *"time"* ]];
 then
            echo "ping successfull to:" $3
 else
            echo "ping not successfull:"$3 "Contact IT Support"
            exit
 fi

문제는 if-else 루프가 비밀번호 프롬프트를 올바르게 수행하지 않거나 SSH 원격 세션에 로그인한 후 비밀번호 프롬프트가 없다는 것입니다. 로그인에 성공하더라도 여전히 비밀번호를 묻습니다. 또한 서버 C에 대한 핑은 서버 A가 아닌 서버 B에서 발생합니다. 저는 TCL 명령을 처음 접했습니다.

답변1

이렇게 기대와 쉘을 혼합할 수는 없습니다. 비밀번호를 보낸 후 예상 스크립트가 종료되고 예상 프로세스가 종료되며 SSH 연결이 사라집니다. B에서 C를 핑하려면 해당 부분을 예상 코드에 넣어야 합니다.

관련 정보