我需要在存储网络中交换机的同一个已建立的通道中执行多个命令(按特定的顺序)。
但每次我使用exec_command(command)
时,都会打开一个新频道并将命令发送到交换机。
由于必须按顺序执行命令,因此不会发生任何事情。
所以,我的疑问是,如何通过单个ssh通道发送多个顺序命令,使用paramiko
库实现。
答案 0 :(得分:1)
ssh 单通道执行多条命令。您需要通过
调用交互式shellssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)
channel = ssh.invoke_shell()
然后向终端发送命令
channel.send(command)
并通过
接收命令输出channel.recv(9999)
打印输出
channel.recv(9999).decode()
答案 1 :(得分:0)
如果您的目标是在同一主机中发送多个命令并接收这些命令的结果,那么我已经编写了一个运行良好的脚本(在这种情况下可以ping几个元素):
# -*- coding: utf-8 -*-
"""
Created on Thu May 5 10:56:10 2016
@author: Me
"""
import paramiko as pk
class cii(Exception):
pass
num = int(input('number : '))
while True :
try:
if len(str(num)) != 5 :
raise cii
except cii:
print ('error message')
break
else:
with open (r'path.txt') as search :
try:
for line in search :
line = line.rstrip()
line1 = line.split(",")
IP = line1[2]
line2 = line1[2].split('.')
line3 = (int(line2[3])+1)
del line2[3]
line2.append(str(line3))
CA = str(".".join(line2))
Machine = line1[1]
Command = 'ping -n 1'
if str(num) in line and yy == 'xx' :
ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(
pk.AutoAddPolicy())
ssh.connect('{}'.format(IP), port=xxxx, username='xxxxxx',
password='xxxx')
stdin, stdout, stderr = \
ssh.exec_command('ping -n 1 xxx.xxx.xxx.xxx\n')
print('Ping xx: \n', stdout.readlines())
ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(
pk.AutoAddPolicy())
ssh.connect('{}'.format(IP), port=xxxx, username='xxxxxx',
password='xxxx')
stdin, stdout, stderr = \
ssh.exec_command('ping -n 1 xxx.xxx.xxx.xxx\n')
print('Ping xx: \n', stdout.readlines())
ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(
pk.AutoAddPolicy())
ssh.connect('{}'.format(IP), port=xxxx, username='xxxxxx',
password='xxxx')
stdin, stdout, stderr = \
ssh.exec_command('ping -n 1 xxx.xxx.xxx.xxx\n')
print('Ping xx: \n', stdout.readlines())
ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(
pk.AutoAddPolicy())
ssh.connect('{}'.format(xx), port=xxxx, username='xxxxxxx',
password='xxxxxxx')
stdin, stdout, stderr = \
ssh.exec_command('{} {}'.format(Command, CA).encode('ascii') + b"\n")
print('Ping CA: \n', stdout.readlines())
break
except TimeoutError:
print ('error message')
break
input ('\n keep windows open and then Enter to exit \n')
您可以通过每次打开新连接来发送多个命令。希望它有所帮助。