subprocess - 使用 python 子进程使用 ssh 登录到远程网络设备
问题描述
def ssh(ip):
try:
cmd = "plink -ssh {}@{} -pw {} -q + " exit" ".format( u , ip , pw )
process = subprocess.Popen( cmd , shell=True , stdin=subprocess.PIPE ,
stdout=subprocess.PIPE,stderr=subprocess.PIPE, encoding='utf-8')
a,b = process.communicate()
print( "a:{},b:{}".format( a , b ) )
succ = ''.join( str( e ) for e in a )
err = ''.join(str(e) for e in b)
succ = succ.rstrip()
process.stdout.close()
print("A-1:{}".format(err))
succout=process.stdout.readlines()
print("Success:{}".format(succ))
if "Access granted:" in succ:
process.communicate(b'\r\n')
process.stdin.write( b"exit\r\n" )
print( "Successfully authenticated" )
output = 'Success' + " " + u
ssh_login_status = output
final_list[ 'SSH_AUTH' ].append( ssh_login_status )
final_list[ 'IP' ].append( ip )
break
else:
output = "Unable to establish SSH connection"
print( "Invalid authentication" )
final_list[ 'SSH_AUTH' ].append( output ) # changed later to error message suggested
final_list[ 'IP' ].append( ip )
except Exception as e:
raise e
except socket.error as e:
output = "Connection Error"
ssh_login_status = output
final_list[ 'SSH_AUTH' ].append( output )
print( output )
process.kill()
在上面的代码中,它成功登录到网络设备,但我无法通过输入exit退出显示>的设备提示。我不知道我错过了什么,请帮忙?
解决方案
推荐阅读
- ruby-on-rails - 在omniauth 更新后Rails 服务器停止运行(中断设计)
- weka - 读取 csv 文件但使用制表符分隔符
- php - Phpoffice 库不能写超过 14 位数字
- azure - Azure Function App 无法更新表行
- php - PHP 8 评论错误
- json - 我有一个提供一些文本数据的 api,但文本在 ListStyle 中不起作用
- node.js - 如何在没有节点的情况下运行基于 HTML 的 Web 组件?
- javascript - 如何将多个文件大小排列到单个 HTML 卡中?
- sql-server - 从 SQL Server 数据库向 FCM 推送通知
- python - Dealing with a corrupt/bugged pip installation in osx