【问题标题】:Telnet and SSH calling in main file, Telnet works but ssh failsTelnet 和 SSH 在主文件中调用,Telnet 工作但 ssh 失败
【发布时间】:2011-11-20 08:00:50
【问题描述】:

我是 python 新手,在某些情况下我正在编写一个脚本来“远程登录”设备 IP,如果远程登录失败,我正在编写 SSH username@deviceIp..

对于所有 Telnet IP,它都可以正常工作。但是当我在执行“ssh admin@153.88.127.21”时,下面的代码会失败,并且我在尝试 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 文件中,我有以下有效的代码 导入 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

【问题讨论】:

  • 当您尝试在命令行上使用相同的用户名和密码 ssh 到该系统时会发生什么?有用吗?
  • 您确定目标主机上正在运行 sshd 守护进程吗?
  • 是的,我在命令行中尝试过它运行良好。这是我运行的命令“ssh admin@153.88.127.21”

标签: python ssh paramiko telnetlib


【解决方案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()
    ...

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 2011-07-14
    • 2012-02-06
    • 2015-04-02
    • 2015-07-30
    • 2011-07-22
    • 2015-01-21
    • 2011-11-04
    • 2017-01-16
    相关资源
    最近更新 更多