我尝试将 ssh 登录到 cisco 设备,但 paramiko.SSHClient 失败。

ssh = paramiko.SSHClient() 
ssh.load_system_host_keys() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
transport = ssh.get_transport() 
ssh.connect(hostname, username='user', password='pwd') 
ssh.close() 

开启 paramiko.DEBU 后:
DEBUG:paramiko.transport:starting thread (client mode): 0x2efdc18L 
INFO:paramiko.transport:Connected (version 1.99, client Cisco-1.25) 
DEBUG:paramiko.transport:kex algos:['diffie-hellman-group1-sha1'] server key:['ssh-    rsa'] client encrypt:['aes128-cbc', '3des-cbc', 'aes192-cbc', 'aes256-cbc'] server encrypt:['aes128-cbc', '3des-cbc', 'aes192-cbc', 'aes256-cbc'] client mac:['hmac-sha1', 'hmac-sha1-96', 'hmac-md5', 'hmac-md5-96'] server mac:['hmac-sha1', 'hmac-sha1-96', 'hmac-md5', 'hmac-md5-96'] client compress:['none'] server compress:['none'] client lang:[''] server lang:[''] kex follows?False 
DEBUG:paramiko.transport:Ciphers agreed: local=aes128-cbc, remote=aes128-cbc 
DEBUG:paramiko.transport:using kex diffie-hellman-group1-sha1; server key type ssh-rsa; cipher: local aes128-cbc, remote aes128-cbc; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none 
DEBUG:paramiko.transport:Switch to new keys ... 
DEBUG:paramiko.transport:Adding ssh-rsa host key for 172.20.112.77: ff666b2246321237c117d838f56df217 
DEBUG:paramiko.transport:Trying discovered key 33e9714dae2cebdcfa3f30820ed2b17b in C:\Users\lauener/.ssh/id_rsa 
DEBUG:paramiko.transport:userauth is OK 
DEBUG:paramiko.transport:Authentication type (publickey) not permitted. 
DEBUG:paramiko.transport:Allowed methods: ['keyboard-interactive', 'password'] 
INFO:paramiko.transport:Disconnect (code 2): Protocol error: expected packet type 50, got 5 

我试图用 Transport 做一些事情,但是为了
transport = ssh.get_transport() 

运输是无。

但是,如果我尝试连接 paramiko 提供的 simple_demo,我可以连接。
以下代码有效:
# get host key, if we know one 
hostkeytype = None 
hostkey = None 
try: 
    host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts')) 
except IOError: 
    try: 
        # try ~/ssh/ too, because windows can't have a folder named ~/.ssh/ 
        host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/ssh/known_hosts')) 
    except IOError: 
        print '*** Unable to open host keys file' 
        host_keys = {} 
 
if host_keys.has_key(hostname): 
    hostkeytype = host_keys[hostname].keys()[0] 
    hostkey = host_keys[hostname][hostkeytype] 
    print 'Using host key of type %s' % hostkeytype 
 
# now, connect and use paramiko Transport to negotiate SSH2 across the connection 
try: 
    t = paramiko.Transport((hostname, port)) 
    t.connect(username='user', password='pwd', hostkey=hostkey) 
    t.close() 
 
except Exception, e: 
    print '*** Caught exception: %s: %s' % (e.__class__, e) 
    traceback.print_exc() 
    try: 
        t.close() 
    except: 
        pass 
    sys.exit(1) 

但我认为使用 SSHClient 会更舒服。这就是为什么我会感谢任何帮助。

谢谢你。

请您参考如下方法:

尝试将 allow_agent 和 look_for_keys 设置为 false ,否则 ssh 客户端将尝试使用您的 ssh 代理(如果处于事件状态)或默认路径中的任何 ssh key 。

ssh.connect(hostname, username='user', password='pwd', allow_agent=False,look_for_keys=False) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!