como verificar um comutador ou roteador usando SSH ou telnet em python

0

agora tem que codificar telnet ou ssh, como saber automaticamente se está usando ssh ou telnet e então decidir usar ssh ou telnet

#!/usr/bin/python

import getpass
import pexpect
import sys
import os
    
por Prince Martin 29.01.2015 / 08:36

2 respostas

1
import socket
import subprocess
ClientSocket = socket.socket()
try:
    ClientSocket.connect(("remote_host", 22))
    port = 22
except socket.error:
    ClientSocket.connect(("remote_host", 23))
    port = 23
finally:
    command = "sshpass -ppassword ssh -t -t username@remote_host -p {0}".format(port).split()
    subprocess.call(command)
    ClientSocket.close()

Aqui estamos primeiro tentando que se a porta 22 (SSH) estiver aberta no host remoto, se abrir pula para o segmento finally , se ela gerar uma verificação de exceção se a porta 23 < strong> (Telnet) está aberto e, em seguida, vai para finally . No segmento finally estamos usando o programa sshpass (você precisa instalá-lo manualmente por sudo apt-get install sshpass , se não estiver instalado) para fornecer a senha diretamente no comando, você também pode usar o paramiko módulo de python aqui.

Preocupação de segurança: você não deve fornecer sua senha como texto simples.

    
por heemayl 29.01.2015 / 11:20
1

Esta pergunta sobre estouro de pilha pode esclarecer seu problema, apenas adapte o código às suas necessidades. Por exemplo:

import socket

sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if sck.connect_ex(('some_host_name_or_ip', 23)) == 0:
    ## Telnet is open do telnet related stuff here

sck.close()

sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if sck.connect_ex(('some_host_name_or_ip', 22)) == 0:
    # SSH is open do ssh related stuff here

sck.close()
    
por xoner 29.01.2015 / 10:08