SSH para um servidor remoto e encontrar o pid específico e matá-lo

0

Eu quero fazer login remotamente em um servidor e, em seguida, encontrar o pid da porta específica. Depois disso mate aquele pid.

Eu tentei isso,

ssh -T [email protected] ; "netstat -lnpt ; awk '$4 ~ /:2020$/ {sub(/\/.*/, "", $7); print $7}'" 

Eu deveria fazer isso usando apenas o comando netstat

    
por Janith 26.11.2018 / 12:54

2 respostas

0

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 executar sudo command
  • grep 2020 : filtra o número da porta
  • awk '{print \}' : permite que awk escolha 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 : chama kill usando 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"
    
por 26.11.2018 / 14:52
0

Você chegou perto o suficiente do seu objetivo. Existem alguns pontos faltantes.

  1. Sem ponto e vírgula após o IP do host ser necessário, o comando remoto deve ir logo após o IP. Então, remova o ponto e vírgula.
  2. Substitua o outro ponto e vírgula na frente do awk por um sinal de pipe | - assim, a saída do netstat irá para o awk.
  3. Todo o cifrão precisa ser escapado com uma barra invertida. caso contrário, é avaliado na máquina local

Você obterá o PID impresso após os pontos acima (se houver). Então você precisará passar esse PID para matar o comando. Eu sugiro que você use xargs kill, pois parece o mais simples aqui. O PID será aceito pelo comando kill dessa maneira.

Assim, a versão final pode parecer:

ssh -T [email protected] "netstat -lnpt | awk '\ ~ /:2020$/ {sub(/\/.*/, "", \); print \}') | xargs kill"

Não é a melhor aparência, mas combina com sua abordagem.

    
por 26.11.2018 / 14:33

Tags