Você pode executar este comando via sudo no servidor para capturar os dados primeiro e em seguida, envie o arquivo resultante de volta para sua estação de trabalho para revisar os dados
sudo tcpdump -i eth0 -s 65535 -w /tmp/wireshark
A situação
Eu gostaria de usar o Wireshark para analisar o tráfego em um de nossos servidores, mas não quero instalar o Wireshark no próprio servidor. Entendo que posso direcionar o tráfego do tcpdump a> via SSH para minha máquina local (Ubuntu) que possui o Wireshark instalado.
O problema
Não consigo fazer login no servidor com uma conta raiz porque ela está desativada. Eu tenho direitos sudo, mas quando logado no servidor o comando sudo tcpdump
não funciona. O comando abaixo (com ou sem sudo) não funciona:
$ ssh [email protected] "sudo tcpdump -s 0 -U -n -w - -i eth0 not port 22" > /tmp/remote
A questão
Existe uma maneira de fazer isso funcionar? Se sim - como?
Sem sudo
, o comando não tem privilégios para capturar o dispositivo:
tcpdump: eth0: You don't have permission to capture on that device
Mas com sudo
, mas sendo executado após ssh
, ele nunca recebe entrada de senha para sudo
no servidor remoto, portanto, a solução é usar -S
( man sudo
) e senha de pipe para sudo
da seguinte forma:
ssh [email protected] "echo sudo_password | sudo -S tcpdump -s 0 -U -n -w - -i eth0 not port 22" > /tmp/remote"
Por um lado, isso é bom para a automação sem obter sudo
prompts de senha e, para ter código / script completamente automatizado, você adicionaria sshpass -p password ssh...
.
No entanto, no servidor em que outras pessoas podem facilmente ler sua senha sudo fornecida como texto aberto durante a sessão ssh
, isso não é recomendado das perspectivas de segurança. Portanto, para ter um sudo
com ssh
e seja um uso seguro, use ssh -t
Com -t
, é impossível canalizar ssh "sudo command"| command
, por exemplo, ssh -t server "cd path/to/directory && sudo"|grep "text"
, mas é possível com o uso de -S e senha de eco, por exemplo, ssh server 'echo password | sudo -S ls -l'| grep 'a'