Heredoc 출력 세그먼트를 로컬 파일로 파이프하는 방법

Heredoc 출력 세그먼트를 로컬 파일로 파이프하는 방법

인터페이스 중 하나에서 tcpdump를 실행하기 위해 원격 장치에 명령을 실행하고 출력을 Ubuntu VM의 로컬 .pcap 파일로 캡처합니다. 내가 내린 명령은 다음과 같습니다.

drew@Drew-Ubuntu:~/Desktop$ sshpass -p $password ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -T $username@$remote-ip -p $remote-port << EOF \ > /home/drew/Desktop/Example_Capture.pcap
> sh
> tcpdump -i eth5.1 -s 0 -n -v not host $local-ip -w -
> EOF
tcpdump: listening on eth5.1, link-type EN10MB (Ethernet), capture size 65535 bytes
^Ct 23
drew@Drew-Ubuntu:~/Desktop$

내가 겪고 있는 문제는 이로 인해 tcpdump를 시작할 수 있다는 것입니다. tcpdump가 실행됨에 따라 "Got $counter" 값이 증가하는 것을 볼 수 있는데, 이는 훌륭합니다. 그런 다음 "CTRL + C"를 눌러 캡처를 중지하면 지정된 위치에 파일이 생성됩니다. 문제는 첫 번째 명령 ">sh"가 이 캡처 파일의 첫 번째 줄에 나타나서 검사를 위해 파일을 제대로 열 수 없다는 것입니다.

""> sh > /dev/null"을 추가하려고 시도했지만 작동하지 않기 때문에 내 것이 아닌 원격 측의 출력만 억제할 것이라고 확신합니다. 구문을 조작해 보았습니다. 하지만 내 명령이 완전히 작동하지 않거나 첫 번째 줄이 포함되어 있기를 바랍니다. 내 로컬 파일을 tcpdump 정보로 채우는 올바른 구문이 있기를 바랍니다.

고쳐 쓰다:

그 이후로 tcpdump 캡처를 실행하는 단일 스크립트에서 작동하도록 업데이트를 시도한 다음 취소하면 sed가 필요에 따라 첫 번째 줄을 정리합니다. 내가 만든 것은 다음과 같습니다.

#!/bin/bash

read -p $'\e[32mEnter Remote IP: \e[0m' remote_ip
read -p $'\e[32mEnter Username: \e[0m' username
read -sp $'\e[32mEnter Password: \e[0m' password
echo
read -p $'\e[32mEnter File Save Location and Name: \e[0m' save_file
echo -e '\e[32mEnter tcpdump Options (ie. -i eth1 -s 0 .....)\e[0m'
read -p $'\e[32m*note: You do not need to enter the \"-w\" modifier to save to a file: \e[0m' tcpdump_options

sshpass -p $password ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -T $username@$remote_ip -p 30007 <<- EOF \ > /tmp/Remote_Capture.pcap
        sh
        tcpdump $tcpdump_options -U -w -
EOF

trap '{ sed 1d /tmp/Remote_Capture.pcap > $save_file; rm /tmp/Remote_Capture.pcap; }' SIGINT SIGTERM

문제는 CTRL+를 입력하면 C마지막 줄에 도달하지 않고 전체 스크립트가 종료되는 것 같습니다. 내 캡처 파일은 상단에 추가 행이 추가된 /tmp 디렉토리에 생성되지만 sed 작업은 실제로 내용을 정리하지 않고 정리된 파일을 내가 설정한 위치로 푸시하지 않습니다.

답변1

파일로 리디렉션하기 전에 첫 번째 줄을 제거할 수 있습니다.

sshpass ... "$remote-port" | sed 1d << EOF > /home/drew/Desktop/Example_Capture.pcap
sh
tcpdump -i eth5.1 -s 0 -n -v not host $local-ip -w -
EOF

관련 정보