Você perdeu o recurso de tubulação ( | em vez de ; ) em seu comando. Eu proponho este:
ssh -t [email protected] "sudo netstat -plnt | grep 2020 | awk '{print \}' | sed s+/.*++g | sort -u | xargs kill"
Suponho que você tenha sudo instalado e permissões para usá-lo em seu servidor. Meus testes mostraram que você pode precisar dele para que o netstat funcione corretamente com a opção -p .
Eu prefiro usar aqui grep + sed para evitar script awk complicado (na minha opinião).
-
-t: permite inserir sua senha de usuário para executarsudocommand -
grep 2020: filtra o número da porta -
awk '{print \}': permite queawkescolha o campo correto -
sed s+/.*++g: remove/e os seguintes caracteres (nota: o sinal+substitui o tradicional/aqui por shortness) -
sort -u: caso você tenha vários processos trabalhando com a porta (acontece se o IPv4 e o IPv6 forem usados) -
xargs kill: chamakillusando a entrada padrão como parâmetro
Você pode precisar adicionar sudo ao último, se o processo de matar for de outro usuário: sudo xargs kill
Como exemplo, você também pode usar variáveis (observe aqui o ponto-e-vírgula usado para separar comandos sem canalizar):
[email protected] ; port=2020 ; ssh -t $server "sudo netstat -plnt | grep $port | awk '{print \}' | sed s+/.*++g | sort -u | xargs kill"