我有一台 Brocade FC 交换机,我想对其进行分区。我的构建文件包含太多行,无法将其复制粘贴到正常的交互式会话中,并且我在交换机和我的 unix 管理服务器之间设置了带有预共享密钥的 ssh。我没有期望,并且更愿意坚持使用直接的 ssh 和 bash。
我尝试单独发送命令,但是失败了,因为每个 ssh 命令都是一个单独的会话,并且会话结束后所有未提交的命令都会被刷新。
我尝试过这个:
cat testbuildfile | ssh -tt user@switch
它几乎可以正常工作,因为它运行了我构建文件中的所有命令,但是它在 Brocade 上留下了一个会话,当它们完成后我无法使用。我有 Brocade 命令提示符,但如果我输入任何内容,它就会挂起,我必须按 ctrl-c 才能返回到我的 unix 服务器。
我知道我可以将提交命令放入构建文件中,但我更希望在提交之前有机会检查和验证工作。理想情况下,我希望它运行我的命令文件,然后让我登录到它启动的会话中,以便我检查,然后手动提交命令。我可以这样做吗?
编辑:如果没有提升的 shell,则无法在 Brocade 交换机上运行脚本,这会使保修失效。
答案1
没错 - 您已劫持了 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