【发布时间】:2015-07-14 06:25:53
【问题描述】:
我有以下脚本,它通过 SSH 进入网络服务器并执行一些命令,由于某种原因,SSH 连接打开,但在执行命令时它关闭(我认为),因此命令失败并显示如下错误?谁能提供有关如何使 SSH 连接持久的信息?
#!/usr/bin/python
import os
import sys
import json
import fileinput
import pwd
from subprocess import Popen, PIPE, STDOUT
import re
import paramiko
import MySQLdb
resource = r'qca-cdit-01'
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(resource, username='username', password='passwordname')
#chan = ssh.get_transport().open_session()
chan = ssh.invoke_shell()
chan.get_pty()
commandstringlist = \
['/local/mnt/workspace/LA_host_builds/AU_LINUX_ANDROID_LA.BF64.1.2.1_RB2.05.01.01.081.031_msm8992',
'cd frameworks/base',
'git fetch ssh://cdit@review-android.company.com:29418/platform/frameworks/base refs/changes/21/1260821/2 && git cherry-pick FETCH_HEAD']
for cmd_val in commandstringlist:
#chan.exec_command(cmd_val)
chan.send(cmd_val)
print(chan.recv(1024))
错误:
Traceback (most recent call last):
File "ssh_test.py", line 21, in <module>
chan.get_pty()
File "/usr/local/lib/python2.7/dist-packages/paramiko/channel.py", line 60, in _check
return func(self, *args, **kwds)
File "/usr/local/lib/python2.7/dist-packages/paramiko/channel.py", line 177, in get_pty
self._wait_for_event()
File "/usr/local/lib/python2.7/dist-packages/paramiko/channel.py", line 1086, in _wait_for_event
raise e
paramiko.ssh_exception.SSHException: Channel closed
【问题讨论】:
-
为什么不尝试使用 Ansible 远程执行命令?
-
Ansible 是一个部署工具。它使用 ssh 连接远程机器并执行操作,例如执行自定义命令和脚本、安装软件包等。与 chef 和 puppet 不同,它是无代理的,这意味着您不必在删除机器上安装任何东西,如只要您有 ssh 访问权限。 ansible.com/home
-
@user2125827 :当我从您的代码中删除
chan.get_pty()时,它似乎正在工作。