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 프로그램?
댓글
답변
이 작업을 수행하기 위해 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는 프로그램이 “언 버퍼”를 통해 대화 형으로 실행되고 있다고 생각하게 할 수 있다고 생각하지만 “언 버퍼”를 “보내기”와 함께 사용하는 방법을 모릅니다. 내 시도는 작동하지 않습니다.
spawn ssh [email protected] ls -la>Ls
와 같은 명령을 사용해 보셨습니까?expect -d ssh_connection.exp
문제가있는 위치를 확인하세요. 가장 먼저 ' 권장하는 것은 모든 절전 모드를expect "prompt#"