在主文件中调用Telnet和SSH,Telnet工作但ssh失败

时间:2011-09-19 14:55:07

标签: python ssh paramiko telnetlib

我是python的新手,在某些情况下,我正在编写一个脚本来'telenet'设备IP,如果是telnet faiils,我正在编写SSH用户名@ deviceIp ..

对于所有Telnet IP,它工作得很好..但是当我正在做“ssh admin@153.88.127.21”时,下面的代码失败了,我在try bloc本身得到错误,就像ssh设备的“socket.error”一样。

如果telnet Ip在try块中失败,我希望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 个答案:

答案 0 :(得分: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()
    ...