SSH가 종료되면 SSH에서 생성된 tcpdump 프로세스를 종료합니다.

SSH가 종료되면 SSH에서 생성된 tcpdump 프로세스를 종료합니다.

우리는 유닉스에서 원격 캡처를 수행하고 있습니다 tcpdump. ssh가 종료될 때마다(즉, ctrl c 또는 기타 다른 인터럽트에 의해) tcpdump다른 쪽 끝이 중지되거나 종료되어야 합니다.

SSH가 종료될 때 SSH에 의해 생성된 프로세스를 종료하기 위해 나열된 대부분의 옵션을 시도했습니다. tcpdump ssh의 경우 -t를 사용하는 것은 예상되지 않은 시작 부분에 행 접두어를 추가하므로 실행 가능하지 않습니다.

따라서 이러한 종류의 문제를 이미 해결한 사람이 있다면 이를 달성하기 위한 좋은 솔루션을 알고 싶습니다.

다음과 같이 루트로 원격으로 실행하고 있습니다 tcpdump.

ssh {remotehost} "tcpdump -i eth0 -s 0 -w - " > /tmp/local_file

감사해요.

답변1

원격으로 실행하면 ssh프로세스를 종료하면 다른 쪽 끝도 종료됩니다. 어떤 이유로든 이 끝을 일시 중지하지 않는 한. 이 경우 백그라운드에서 더 큰 스크립트의 일부로 실행할 수 있습니다.

또한 루트를 원격으로 사용해서는 안 되며, ssh를 수행하는 측에서는 루트가 필요하지 않습니다. 가능한 한 루트로 작업하지 마십시오. 기능을 갖춘 원격 사용자를 사용하십시오 sudo.

tcpdump기본적으로 stdout에 쓰기 때문에 "w -"가 필요하지 않을 수도 있습니다 .

tcpdump세션을 더 잘 제어하기 위해 캡처된 패킷 수를 제한할 수도 있습니다 . 시스템에서 포트 22를 제외해야 합니다. 그렇지 않으면 ssh원격 시스템이 일종의 자체 공급 재귀적 방식으로 현재 세션을 캡처합니다.

따라서 1000개의 패킷을 캡처하려면 다음을 수행하십시오.

$ssh [email protected] "sudo tcpdump -i eth0 -s0 -c 1000 not port 22" > /tmp/local_file

덜 깨끗한 또 다른 대안은 pkill 이후에 실행되는 것입니다.

$ssh ..."sudo tcpdump"
$ssh ..."pkill tcpdump"

마지막 경고로서 /tmp또는 상주하는 루트는 제한된 파일 시스템이나 RAM에 있는 경우가 많습니다. 특히 권한이 있는 사용자로서 /tmp 디렉토리에 예측 가능한 이름을 만드는 것도 보안상 위험합니다. 캡처 파일의 다른 위치를 사용하고 싶을 수도 있습니다.

또한 시스템 관리자가 ansible. 원격 관리를 위한 보다 복잡한 도구를 자동화하거나 사용하려면 다음을 참조하세요.PowerShell의 "일대다" 원격 기능에 해당하는 Linux

관련 정보