我从哪里主机“A”我需要通过主机“B”和“C” ssh到主机“d”用例(我想能够解决应用到尽可能多的中间宿主越好):
A ==>乙==>ç==> d
一旦建立了连接到d,我想运行命令[“COMM1”,“COMM2”,“comm3”]的列表,并接收响应为[“输出1”,“输出2”,“输出3”],在主机A.我想出了是,一旦你到达主办d唯一的策略:
当我开发的意识到,试图重新建立交互shell通道将导致引发EOFError。我有预感,在步骤3中关闭通道终止整个SSH会话从主机A到主机D.一路
它是,但是,势在必行,否则关闭通道,并开始一个新的交互shell为每一个命令,你会读出信道的全输出(包含所有3个命令的输出)作为文本的一个大块,你然后在使用屏幕抓取,这是不理想的处理。除了上面的算法?如果是的话怎么能与的paramiko实现它,为什么我得到EOFError异常?
我也试图实现这种使用面料。它曾与一些设备,但不是思科的。其原因是,Fabric使用的paramiko也未通过一些Cisco设备(直视client.exec_command)所支持的SSH远程命令执行功能。因此交互式会话是唯一的出路。
为简单起见,可以考虑无跳情况:
$ ssh -i key user@host 'echo command; echo control'
command
control
$ ssh -i key user@host 'echo command; echo control' >/dev/null
$ ssh -i key user@host 'echo command; echo 1>&2 control' >/dev/null
control
换句话说,我们有两个输出通道...