O comando tee
grava dados no arquivo de saída à medida que o recebe, mas scp
copia o arquivo imediatamente e copia-o apenas uma vez. Como cada comando no pipeline é executado simultaneamente (ou quase), você obtém apenas alguns (ou nenhum) pacote de saída para o arquivo capture.txt antes que o arquivo seja copiado por scp
.
Existem algumas maneiras de fazer o que você parece querer fazer.
Se você quiser copiar alguns pacotes de tcpdump
e, em seguida, transferir o arquivo para o host remoto após a conclusão, poderá usar a opção -c
para finalizar tcpdump
após capturar esse número de pacotes. Separe seu comando scp
do pipeline usando um ponto e vírgula para que ele seja executado depois que os comandos tcpdump
e tee
forem concluídos:
tcpdump -l -c 10 | tee /tmp/capture.txt; scp /tmp/capture.txt root@remotehost:/tmp
Ou, se você quiser ver os pacotes em tempo real e também copiá-los em tempo real, você pode usar tee
para enviar os pacotes para / dev / tty para que possa vê-los e enviá-los para um% Comandossh
que os grava em um arquivo no host remoto:
tcpdump -l | tee /dev/tty | ssh root@remotehost "cat > /tmp/capture.txt"
Note que sem a opção -c
aqui, o tcpdump será executado até que você o mate.
Se você quisesse os pacotes armazenados em um arquivo local capture.txt, bem como no controle remoto, você poderia usar vários comandos tee
:
tcpdump -l | tee /tmp/capture.txt | tee /dev/tty | ssh root@remotehost "cat > /tmp/capture.txt"