题 将交互式分区命令发送到Brocade交换机


我有一个Brocade FC交换机,我想做一些分区。我有一个包含太多行的构建文件,无法复制粘贴到正常的交互式会话中,我在交换机和我的unix管理服务器之间设置了预共享密钥。我没有期望,宁愿坚持直接ssh和bash。

我尝试单独发送命令,但是它失败了,因为每个ssh命令都是一个单独的会话,并且一旦会话被删除,所有未提交的命令都会被刷新。

我试过这个:

cat testbuildfile | ssh -tt user@switch

它几乎可以工作,因为它运行我的构建文件中的所有命令,但是它留给我在Brocade上的会话,当它们完成时我不能使用它。我有我的Brocade命令提示符,但如果我输入任何内容,它会挂起,我必须ctrl-c才能返回到我的unix服务器。

我知道我可以将commit命令放入我的构建文件中,但我宁愿有机会在提交之前检查并验证工作。理想情况下,我想让它运行我的命令文件,然后让我登录到它启动的会话中检查然后手动提交命令。我可以这样做吗?

编辑:如果没有升级的shell会导致保修失效,则无法在Brocade交换机上运行脚本。


5
2017-07-01 01:34






答案:


对 - 你已经在ssh会话中劫持了stdin,它已经不再连接到你的终端了。除非你添加 quit 进入命令流它会挂起。

试试这个魔术:

#!/bin/bash
host=blch1-sw3
session=$host.$$
CR="$(echo -e '\r')"

screen -d -m -S $session
screen -S $session -p 0 -X zombie kr
screen -S $session -p 0 -X hardstatus alwayslastline
screen -S $session -p 0 -X hardstatus string "$host config change 3.14159"
screen -S $session -p 0 -X stuff "exec ssh -l USERID $host$CR"
sleep 2
screen -S $session -p 0 -X stuff "PASSW0RD$CR"
sleep 5
screen -S $session -p 0 -X stuff "version$CR"
sleep 2
screen -S $session -p 0 -X stuff "# Changes complete - commit or abort$CR"
screen -x $session

3
2017-07-01 04:35



我没有在AIX上安装屏幕...但是阅读它,它肯定似乎值得争取的东西。与此同时,会话,管道和重定向领域是否有任何东西可以让我到达我需要的位置? - Basil
@Basil Dude你什么都没有:)我可能最终会编写一个生成SSH的程序,注入一堆自己的命令然后等待stdin的输入并将其传递给进程。或者争取屏幕。 - MikeyB
谢谢:)我正在考虑该程序选项,但令人遗憾的是,博科如此努力。 - Basil
我想你也可以配置下载部分配置。但这就是为什么他们要你买他们的工具:) - MikeyB