Centos 7이 설치된 PC에서 실행되고 Centos 7이 설치된 다른 PC에 연결되는 스크립트를 작성해야합니다. ssh를 사용하여 콘솔 명령 (예 : “ls -la”)을 실행하고 해당 출력을 나중에 분석 할 수 있도록 파일에 저장합니다.

다음 EXPECT 스크립트를 작성했습니다.

ssh_connection.exp :

#!/usr/bin/expect -f set timeout 120 spawn ssh [email protected] expect "assword:" send "PASSWORD\r" expect "prompt#" sleep 5 puts "Executing ls -la" send "ls -la\r" sleep 10 puts "Executing ps -af" puts "ps -af\r" sleep 10 puts "Closing the ssh session\r" send "exit\r" 

이 스크립트는 ssh를 통해 IP = 129.0.0.10 인 시스템에 올바르게 연결하고 화면에 메시지를 표시합니다. “puts”에 표시되는 내용 : Executing ls -la Executing ps -af ssh 세션 닫기

그러나 send와 함께 보내는 명령을 실행 한 결과는 표시되지 않습니다.

ls -la ps -af 

이 스크립트의 문제점은 무엇입니까?

나중에 bash로 분석 할 수 있도록 파일에 저장된 이전 명령의 출력을 어떻게 만들 수 있습니까? 스크립트 또는 C 프로그램?

댓글

  • 그냥 sta 사용 ssh 키와 heredoc을 사용하는 ndard ssh 명령
  • 너무 복잡해 보이는 것 같습니다. ssh를 통해 작업을 자동화하기 위해 expect을 사용할 필요가 없습니다.
  • spawn ssh [email protected] ls -la>Ls와 같은 명령을 사용해 보셨습니까?
  • 다음으로 스크립트 실행 expect -d ssh_connection.exp 문제가있는 위치를 확인하세요. 가장 먼저 ' 권장하는 것은 모든 절전 모드를 expect "prompt#"
답변

이 작업을 수행하기 위해 expect을 사용할 필요는 없습니다. ssh 명령은 SSH 연결을 통해 실행할 명령의 추가 인수를 취할 수 있습니다.

1 단계

SSH 키 쌍 (google it)을 설정 한 다음 SSH를 복사합니다. 키를 원격 서버에 연결합니다. 이렇게하려면 ssh-copy-id를 사용하는 것이 좋습니다. 이 U & LQ & A 제목 : 올바르게 복사하는 방법에 대한 내 답변보기 ssh를 사용하여 연결할 수 있도록 원격 서버에서 로컬 컴퓨터로의 개인 키 .

단계 # 2

이제 키를 사용하여 서버에 SSH로 연결할 수 있습니다. , 위의 문제는 다음과 같습니다.

$ ssh [email protected] "ls -la; ps -af" 

여기 문서 (heredocs aka . here-docs) 를 통해이 기술을 더욱 향상시킬 수 있습니다.

$ ssh [email protected] <<EOF > ls -la > ps -af > EOF 

또는 파일에 명령을 넣고 :

$ ssh [email protected] < my.cmds 

댓글

  • 내 질문이 여기에있는 이유 unix.stackexchange.com/questions/458801/ … 이 (가) 중복으로 표시 되었습니까? 비밀번호뿐만 아니라 사용자 이름을 입력하도록 승진하고 싶기 때문에 '이 다르다고 생각합니다.

답변

감사합니다.

다음 줄을 대체하는 스크립트를 수정했습니다.

spawn ssh [email protected]

이것과 함께, 당신이 말해 주듯이 :

spawn ssh [email protected] “ls -la; ps -af”

이제 화면에 명령 출력이 보입니다. 파일로 리디렉션 할 수 있습니다.

다음으로 Cisco와 유사한 스위치 인 다른 컴퓨터에서 명령을 실행하도록이 스크립트를 조정하려고했습니다 (Cisco는 아니지만 호환 가능).

ssh를 사용하여 스위치에 연결하는 스크립트는 다음과 같습니다.

** #! / usr / bin / expect -f

set timeout 120

spawn ssh [email protected] “show vlan 500”

expect “assword :”

send “PASSWORD \ r”

expect “prompt # “

sleep 5

puts”Closing the ssh session \ r “

send”exit \ r “**

이것은 스위치에서 작동하지 않으며 다음 오류가 발생합니다.

spawn ssh [email protected] show vlan 501

[email protected] “s password :

imish : invalid option-“c “

자세한 내용은`imish –help”를 사용해보십시오. 정보.

send : spawn id exp6 not open

while executing 

“send”exit \ r “”

(file "./ssh_script_v3.exp" line 7) 

따라서 “send”를 사용하여 명령을 보내는 expect 스크립트를 사용해야합니다.

! / usr / bin / expect

spawn ssh [email protected]

expect “assword :”

send “user \ r”

expect “>”

sleep 5

send “sh vlan 500 \ r”

sleep 5

send “exit \ r”

이제 오류가 발생하지 않지만 화면에 아무 것도 표시되지 않습니다.

이 내용을 읽었습니다. Linux 및 UNIX 시스템은 비대화 형으로 실행할 때 자동으로 출력을 버퍼링하기 때문에 발생합니다. Expect는 프로그램이 “언 버퍼”를 통해 대화 형으로 실행되고 있다고 생각하게 할 수 있다고 생각하지만 “언 버퍼”를 “보내기”와 함께 사용하는 방법을 모릅니다. 내 시도는 작동하지 않습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다