우리는 유닉스에서 원격 캡처를 수행하고 있습니다 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