前面的详细信息
我需要在交换机上使用ssh来ping不同的主机。早些时候,我为每个主机启动了一个线程,但结果很容易超过了最大ssh连接数,所以我根据这个创建了一个交互式shell会话。但当我并行运行时,它在发出第一个命令后就一直挂在那里。我不知道如何修复此问题。
简化代码如下:
import paramiko
import time
from paramiko import SSHClient
from multiprocessing.dummy import Pool
def rping(src, user, passwd, dst):
def command(des):
chan.send('ping -s 64 -t 1500 %s\r\n' % des)
time.sleep(3)
resp = chan.recv(9999)
print resp
ssh = SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(src, 22, user, passwd, timeout=3)
chan = ssh.invoke_shell()
pool = Pool()
pool.map(command, dst)
pool.close()
pool.join()
if __name__ == '__main__':
print time.ctime()
src = '10.130.1.121'
user = 'user'
passwd = 'password'
dst = ['10.130.1.122', '10.130.1.123', 10.130.1.124'']
rping(src, user, passwd, dst)
print time.ctime()
请记住,使用multiprocessing.dummy
实际上是在使用threading
模块。因此,command
函数不会返回任何内容。
def rping(src, user, passwd, dst):
def command(des):
chan = ssh.invoke_shell() # new channel
chan.send('ping -t 64 -s 1500 -c 3 %s\r\n' % des)
time.sleep(3)
resp = chan.recv(9999)
chan.close() # close channel
return resp
ssh = SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(src, 22, user, passwd, timeout=3)
pool = Pool(len(dst))
result = pool.map(command, dst)
pool.close()
pool.join()
ssh.close() # close SSH client
return result
问题内容: 我正在重写我在Python中编写的Bash脚本。该脚本的关键是 我在使用paramiko进行嵌套身份验证时遇到问题。我找不到适合我具体情况的任何示例,但是我能够在远程主机上找到带有 sudo的 示例。 第一种方法写入标准输入 第二个创建通道并使用类似于套接字的 send 和 recv 。 我能够使 stdin.write 与 sudo一起使用 ,但在远程主机上的 ssh 上却不起作用。
我打算使用paramiko在远程主机上运行几个命令,但ssh会话在运行一个命令后关闭。 下面列出的代码: 那么有什么方法可以阻止ssh会话关闭吗?或者帕拉米科的替代品? 有什么方法可以让paramiko ssh会话一直处于活动状态吗? paramiko调试模式信息返回如下: 启动线程(客户端模式):0x2657E10L 已连接(版本1.99,客户端组件-5.20) kex ALGOS:[u'dif
我正在编写一个python脚本,该脚本发送到网络中的每台交换机,并发出一个copy running-config TFTP命令,备份交换机的运行配置。我在windows上使用Python2.7中的paramiko库。 脚本本身非常简单,它所做的只是创建一个名为“备份”的目录(如果还不存在的话),以及另一个名为“今天的日期”的目录,然后将该目录用于TFTP。并启动TFTP服务器。然后它只需通过SSH
问题内容: 我尝试过的 然后 再发送密码导致没有root 然后导致“频道关闭”错误 然后导致不被root 然后写到标准输入并刷新它导致没有root 问题答案: 看看这个例子: 在此处找到具有更多说明的示例:http : //jessenoller.com/2009/02/05/ssh- programming-with-paramiko-completely- different/ 希望能帮助到你
我已经通过SSH(从我的主机)访问了一台远程机器(称之为RM)。我正在通过SSH会话在RM中运行一个docker映像。两者都基于Ubuntu16.04。 我正在这样做,因为出于某种目的我必须重新启动我的主机。 PS:在这个链接中正确的方式从容器中分离而不停止它,它不是通过SSH会话运行docker容器。所以两种情况是不同的。
问题内容: 我正在SSH shell会话上运行命令,为了获得该命令,我在官方示例后面使用了JSch 。 我也在 StackOverflow* 上也遵循此示例编写了自己的代码 * 这是 我的代码: 看起来不错,但奇怪的是 它只能在调试模式下工作 。如果我运行它,程序将无法执行。我认为它锁定 了while循环, 但是我不明白为什么。没有while循环,代码将到达终点,但是不执行任何shell命令。 我