如何在 Python 中使用 SSH 或 telnet 检查交换机或路由器

如何在 Python 中使用 SSH 或 telnet 检查交换机或路由器

现在必须对 telnet 或 ssh 进行硬编码,如何自动知道使用的是 ssh 还是 telnet,然后决定使用 ssh 还是 telnet

#!/usr/bin/python

import getpass
import pexpect
import sys
import os

答案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()

这里我们首先尝试端口 22(SSH)远程主机是否打开,如果打开则跳转到该finally段,如果引发异常则检查端口 23(远程登录)打开后,转到finally。在finally我们使用sshpass程序的部分(如果没有安装,则需要通过 手动安装sudo apt-get install sshpass)直接在命令中提供密码,您也可以使用波拉米科这里的 python 模块。

安全问题:您不应以纯文本形式提供您的密码。

答案2

堆栈溢出问题可能会解决您的问题,只需根据您的需要调整代码即可。例如:

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()

相关内容