"show running-config"와 같은 명령을 실행하고 출력을 로컬 컴퓨터의 파일에 저장하려면 장치에 SSH를 통해 연결하는 스크립트를 작성해야 합니다. 명령줄에서 비슷한 작업을 수행하고 파일을 로컬 시스템에 저장했습니다. 예를 들어,
ssh [email protected] ls > ls_from_remotes_sys
ls_from_remotes_sys 파일은 내 로컬 시스템에 있습니다. 하지만 이 스크립트를 작성해야 하는데 이 작업을 수행하는 방법을 아는 유일한 방법은 Expect를 사용하는 것입니다. 그래서 나는 이것을 정리했습니다 :
#!/usr/bin/expect -f
spawn ssh [email protected] ls > ls_from_remotes_sys
expect "[email protected]'s password:"
send "password\r"
interact
Expect 스크립트는 작동하지만 파일이 원격 시스템에 저장되는데 이는 내가 원하는 것이 아닙니다.
질문 1 - 파일이 명령줄에서 로컬 시스템에 저장되는 이유와 Expect를 사용하여 원격 시스템에 저장되는 이유는 무엇입니까?
질문 2 - 내 로컬 시스템으로 파일을 보낼 수 있는 방법이 있습니까? (ssh 반환은 옵션이 아닙니다)
나는 스크립트가 파일로 리디렉션하는 대신 명령 결과를 화면에 출력하도록 할 수 있다고 생각했습니다. 그래서,
질문 3 - 이렇게 하면 원격 시스템의 화면에 있는 stdout을 어떻게 캡처하여 로컬 시스템의 파일로 보낼 수 있습니까?
답변1
사용한 명령은 다음과 expect
같습니다.
spawn ssh [email protected] ls > ls_from_remotes_sys
이는 효과적으로 호출합니다.
exec("ssh","[email protected]","ls",">","ls_from_remotes_sys")
이는 세 개의 매개변수( ls
및 >
파일 이름)가 원격 시스템으로 전송된다는 의미입니다. 즉, 리디렉션이 원격 시스템에서 발생합니다.
ㅏ함께 모으다아마도 그것을 호출함으로써 sh -c "ssh test@...."
.
expect
또 다른 옵션은 스크립트 외부에서 리디렉션을 완료하는 것입니다.
예를 들어 "get_ls"라고 하면
#!/usr/bin/expect -f
spawn ssh [email protected] ls
expect "[email protected]'s password:"
send "password\r"
interact
그럼 당신은 이것을 할 수 있습니다 get_ls > ls_from_remotes_sys
.