Python中文
首页
教程
问答
标签
搜索
登录
注册
Python PARAMIKO SSH关闭会话
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>在sendShell对象运行完list commandfactory[]之后,我需要帮助来终止SSH会话。</p> <p>我有一个python脚本,使用paramiko通过ssh连接到cisco实验室路由器;在commandfactory[]中执行命令;并将结果输出到标准输出。一切似乎都正常,除了,在运行完所有命令之后,我似乎无法关闭SSH会话。在我终止脚本之前,会话只是保持打开状态。</p> <pre><code>import threading, paramiko, re, os class ssh: shell = None client = None transport = None def __init__(self, address, username, password): print("Connecting to server on ip", str(address) + ".") self.client = paramiko.client.SSHClient() self.client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy()) self.client.connect(address, username=username, password=password, look_for_keys=False) self.transport = paramiko.Transport((address, 22)) self.transport.connect(username=username, password=password) thread = threading.Thread(target=self.process) thread.daemon = True thread.start() def closeConnection(self): if(self.client != None): self.client.close() self.transport.close() def openShell(self): self.shell = self.client.invoke_shell() def sendShell(self): self.commandfactory = [] print("\nWelcome to Command Factory. Enter Commands you want to execute.\nType \"done\" when you are finished:") while not re.search(r"done.*", str(self.commandfactory)): self.commandfactory.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(input(":")) if self.commandfactory[-1] == "done": del self.commandfactory[-1] break print ("Here are the commands you're going to execute:\n" + str(self.commandfactory)) if(self.shell): self.shell.send("enable" + "\n") self.shell.send("ilovebeer" + "\n") self.shell.send("term len 0" + "\n") for cmdcnt in range(0,len(self.commandfactory)): self.shell.send(self.commandfactory[cmdcnt] + "\n") self.shell.send("exit" + "\n") self.shell.send("\n") else: print("Shell not opened.") def process(self): global connection while True: # Print data when available if self.shell != None and self.shell.recv_ready(): alldata = self.shell.recv(1024) while self.shell.recv_ready(): alldata += self.shell.recv(1024) strdata = str(alldata, "utf8") strdata.strip() print(strdata, end = "") sshUsername = "adrian" sshPassword = "ilovebeer" sshServer = "10.10.254.129" connection = ssh(sshServer, sshUsername, sshPassword) connection.openShell() while True: connection.sendShell() </code></pre> <p>我希望SSH会话在运行完“commandfactory”列表中的所有命令后终止(下面的代码)。</p> <pre><code>def sendShell(self): self.commandfactory = [] print("\nWelcome to Command Factory. Enter Commands you want to execute.\nType \"done\" when you are finished:") while not re.search(r"done.*", str(self.commandfactory)): self.commandfactory.append(input(":")) if self.commandfactory[-1] == "done": del self.commandfactory[-1] break print ("Here are the commands you're going to execute:\n" + str(self.commandfactory)) if(self.shell): self.shell.send("enable" + "\n") self.shell.send("ilovebeer" + "\n") self.shell.send("term len 0" + "\n") for cmdcnt in range(0,len(self.commandfactory)): self.shell.send(self.commandfactory[cmdcnt] + "\n") self.shell.send("exit" + "\n") self.shell.send("\n") </code></pre> <p>我的代码主要来自<a href="https://daanlenaerts.com/blog/2016/07/01/python-and-ssh-paramiko-shell/" rel="nofollow">https://daanlenaerts.com/blog/2016/07/01/python-and-ssh-paramiko-shell/</a>。非常感谢Daan Lenaerts的一个好博客。我确实根据自己的需要做了一些改变。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>使用self.transport.close()结束sendShell函数,请参见<a href="http://docs.paramiko.org/en/2.0/api/transport.html" rel="nofollow">http://docs.paramiko.org/en/2.0/api/transport.html</a></p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
5 回答
无法使用Django\u mssql\u后端迁移到外部hos
1 回答
无法使用Django&Python3.4连接到MySql
9 回答
无法使用Django+nginx上载媒体文件
4 回答
无法使用Django1.6导入名称模式
3 回答
无法使用Django1.7和mongodb登录管理站点
1 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
8 回答
无法使用Djangockedi验证CBV中的字段
3 回答
无法使用Djangocketditor上载图像(错误400)
4 回答
无法使用Djangocron进行函数调用
7 回答
无法使用Djangofiler djang上载文件
6 回答
无法使用Djangokronos
6 回答
无法使用Djangomssql provid
9 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
6 回答
无法使用Djangomssq迁移Django数据库
4 回答
无法使用Djangonox创建用户
4 回答
无法使用Djangopyodb从Django查询SQL Server
7 回答
无法使用Djangopython3ldap连接到ldap
5 回答
无法使用Djangoredis连接到redis
3 回答
无法使用Django中的FK创建新表
4 回答