主文件中调用Telnet和SSH,Telnet正常但SSH失败

1 投票
1 回答
2620 浏览
提问于 2025-04-17 02:36

我刚开始学Python,正在写一个脚本,用来在某些情况下通过'telnet'连接设备的IP,如果telnet失败,就用SSH的方式连接,格式是ssh username@deviceIp。

对于所有的Telnet IP,这个脚本运行得很好。但是当我尝试用"ssh admin@153.88.127.21"连接时,下面的代码就出错了,错误发生在try块里,提示是"socket.error",这是针对SSH设备的错误。

我希望在telnet IP连接失败时,SSH设备能够进入else块。

在我的Main.py文件中

    try:
        #TELNET MODULE CALL
        tn= _telnetMOD._telnet(username, password, device)
        break
    else:
        #SSH MODULE CALL
        ssh= _sshMOD._ssh(username, password, device)

在_telnetMod文件中,我有以下代码,这段代码可以正常工作: import telnetlib

def _telnet(_userVar,_passwordVAR, _device):
    tn=''
    tn = telnetlib.Telnet(_device,23)
    #PYTHON VERSION 2.6 AND HIGHER
    tn.read_until("Username: ",10)
    tn.write(_userVar + "\r")
    if _passwordVAR:
        tn.read_until("Password: ",10)
        tn.write(_passwordVAR + "\r")    
    return tn

在_sshMOD文件中,我有以下代码,但这段代码出错了,我不太确定这段代码的问题在哪里。

import paramiko 

def _ssh(_userVar,_passwordVAR, _device):
    ssh=''
    ssh= paramiko.SSHClient()
    ssh.connect(_device, username=_userVar,password=_passwordVAR)
    return ssh

1 个回答

1

你是不是忘了调用 client.load_system_host_keys() 这个方法?这是文档中的一个例子:

client = SSHClient()
client.load_system_host_keys()
client.connect('ssh.example.com')
stdin, stdout, stderr = client.exec_command('ls -l')

你应该像这样使用 try 语句:

try:
    telnet()
except:
    telnet = false
if telnet == false:
    try:
        ssh()
    ...

撰写回答