如何在SSH连接内获取Telnet.Execute Command的执行输出?
解决SSH嵌套Telnet获取命令输出的问题
我明白你现在遇到的困扰:想通过Robot Framework先SSH到一台中间主机,再在这台主机上Telnet到目标设备,最后获取Telnet会话里dir命令的输出,但直接用SSHLibrary.Execute Command嵌套Telnet.Execute Command完全行不通,对吧?
问题根源
这是因为SSHLibrary.Execute Command的作用是在SSH连接的远程主机上执行系统命令,而Telnet.Execute Command是Robot Framework的Telnet库关键字——它并不是远程主机上存在的可执行命令。你之前的写法相当于让远程主机去执行一个不存在的Telnet.Execute Command命令,自然拿不到任何有效输出。
正确实现方案
我们需要在SSH会话中直接启动telnet进程,通过交互式的方式和telnet会话交互:发送登录信息、执行命令并捕获输出。下面是调整后的完整Robot Framework代码:
*** Settings *** Library SSHLibrary Library BuiltIn Suite Setup Open Connection And Log In Suite Teardown SSHLibrary.Close All Connections *** Variables *** ${HOST} OMITTED.70 ${Other-Host} OMITTED.1 ${OTHER-USERNAME} OMITTED ${OTHER-PASSWORD} OMITTED ${USERNAME} OMITTED ${PASSWORD} OMITTED # 替换成目标Telnet设备登录后的实际提示符(比如>、#等) ${OLT_PROMPT} > *** Test Cases *** Acessando OLT e verificando saída do comando dir # 1. 在SSH会话中启动telnet进程连接到目标OLT ${telnet_pid}= SSHLibrary.Start Command telnet ${Other-Host} # 2. 等待并处理用户名输入 SSHLibrary.Wait For Command Output login: timeout=10s SSHLibrary.Write To Command ${telnet_pid} ${OTHER-USERNAME}${ENTER} # 3. 等待并处理密码输入 SSHLibrary.Wait For Command Output password: timeout=10s SSHLibrary.Write To Command ${telnet_pid} ${OTHER-PASSWORD}${ENTER} # 4. 等待登录成功后的设备提示符 SSHLibrary.Wait For Command Output ${OLT_PROMPT} timeout=10s # 5. 发送dir命令 SSHLibrary.Write To Command ${telnet_pid} dir${ENTER} # 6. 等待命令执行完成,读取输出结果 ${saida}= SSHLibrary.Read From Command Output ${telnet_pid} timeout=10s # 7. 在控制台打印输出 BuiltIn.Log to console \n=== 输出结果 ===\n${saida}\n================ # 8. 关闭telnet进程 SSHLibrary.Stop Command ${telnet_pid} *** Keywords *** Open Connection And Log In SSHLibrary.Open Connection ${HOST} SSHLibrary.Login ${USERNAME} ${PASSWORD}
注意事项
- 一定要把
${OLT_PROMPT}替换成目标Telnet设备登录后实际显示的提示符(比如有些设备是#,有些是>),否则Wait For Command Output会超时失败 ${ENTER}是Robot Framework内置变量,代表回车键,确保你已经启用了BuiltIn库(默认自动启用)- 如果遇到时序问题(比如等待提示符超时),可以适当调整
timeout参数的值,或者用更模糊的匹配(比如包含部分字符的字符串)
内容的提问来源于stack exchange,提问作者vladwoguer
相关产品推荐
相关产品推荐

