使用golang crypto/ssh在Cisco上运行多个命令

使用golang crypto/ssh在Cisco上运行多个命令,go,ssh,Go,Ssh,我将以下代码拼凑在一起,让我可以向Cisco box的ssh控制台发送读写操作,但我目前不确定如何在同一会话中发送多个命令 我包括整个程序,以便服务器作为一个起点,其他人试图在未来同样的事情,我找不到一个工作的例子,特别是GolangCisco 如您所见,我在session.Run()中硬编码了“en”命令。 如果在该命令之后添加命令,只需执行以下操作: err = session.Run("en\r") err = session.Run("password\r") 它被忽略了。阅读告诉我这

我将以下代码拼凑在一起,让我可以向Cisco box的ssh控制台发送读写操作,但我目前不确定如何在同一会话中发送多个命令

我包括整个程序,以便服务器作为一个起点,其他人试图在未来同样的事情,我找不到一个工作的例子,特别是GolangCisco

如您所见,我在session.Run()中硬编码了“en”命令。 如果在该命令之后添加命令,只需执行以下操作:

err = session.Run("en\r")
err = session.Run("password\r")
它被忽略了。阅读告诉我这是故意的。所以我的问题是:如何设置一些东西,让我输入命令,读取输出,解析输出,然后根据输出输入更多命令


一旦我开始考虑这个问题,我计划解析路由表并发出命令作为响应。即,如果缺少路线X,则添加它

这可能不是惯用的围棋,我还在学习。我前一段时间写这篇文章是为了让备份关闭开关,但我认为它符合您的要求:


为什么不能打开多个会话,每个命令一个会话?我的印象是一个新会话无法维护上下文。Ie,我需要在同一“线程”中按特定顺序输入一组特定的命令,即:命令二取决于命令一。我将上下文等同于会话,这不正确吗?ssh会话只能运行一个命令。这就是ssh协议的工作原理。维护“状态”的唯一方法是打开shell(在这种情况下,您需要以交互方式解析cli)或执行脚本(只能在脚本执行期间维护状态)。
err = session.Run("en\r")
err = session.Run("password\r")
func writeBuff(command string, sshIn io.WriteCloser) (int, error) {
    returnCode, err := sshIn.Write([]byte(command + "\r"))
    return returnCode, err
}