sshpass와 ssh를 사용하여 Linux 시스템에 명령을 보낸 다음 연결을 끊습니다. 명령은 제대로 전송되었지만 예상한 응답을 얻지 못했습니다. 로그인 후 호스트가 5개의 빈 줄을 보낸 다음 5줄의 배너를 보내는 것을 확인했습니다.
ssh 명령(명령을 인수로 전달할 때)은 첫 번째 빈 줄만 반환하는 것처럼 보입니다. 모든 텍스트를 반환하도록 하는 방법이 있나요? (또는 반환하기 전에 모든 텍스트를 캡처하기 위해 5초 동안 기다리십시오)
명령은 다음과 같으며 응답을 Bash 변수로 캡처합니다.
RESPONSE=$(sshpass .... ssh..... "my command")
답변1
이를 통해 호스트의 출력을 캡처할 수 있습니다.
user@host /tmp# output=$(ssh login@domain "ls")
login@domain's password:
user@host /tmp# echo $output
file1
file2
file3
또 다른 솔루션은 출력뿐만 아니라 배너를 포함한 모든 것을 기록하므로 훨씬 더 좋습니다.
ssh user@domain |tee /tmp/output
여기서 /tmp/output에는 전체 로그가 포함됩니다.
답변2
벽을 캡처하려면 Expect 스크립트를 생성해야 합니다.
#!/usr/bin/expect -f
spawn sshpass -p XXX ssh login@domain
expect "$ "
send "ls\r"
expect "$ "
send "exit\r"
다음과 같이 출력을 캡처합니다.
OUTPUT=$(expect expectscript)
SSH 키를 사용해야 합니다.