【发布时间】:2017-05-16 11:38:48
【问题描述】:
我试图创建一个非托管脚本来管理我的 tp-link 开关(更改状态、描述和速度,...)。 tp-link 使用与 cisco 类似的连接...例如:Deactivate a port:
enable
configure
interface gigabitEthernet 1/0/20
shutdown
如果我连接到我的交换机(使用 ssh),我可以毫无问题地执行所有命令,但我使用命令行不起作用:
例如:
ssh x.x.x.x "sh interface configuration"
此命令应该显示我的端口状态,但不显示任何内容。用户名和密码没问题。 SSH 返回:
Authenticated with partial success.
Connection to 192.168.20.26 closed by remote host.
您能说出执行此操作的其他选项吗?
我尝试使用 expect 和 telnet 执行此选项,结果还可以,但如果我使用 ssh 连接执行 expect 也不起作用。
我的期望脚本:
#!/usr/bin/expect -f
spawn -noecho telnet 192.168.20.26
expect "User:"
send -- "admin\r"
expect "Password:"
send -- "mypass\r"
send -- "enable\r"
send -- "configure\r"
send -- "interface gigabitEthernet 1/0/20\r"
send -- "description hola\r"
send -- "exit\r"
send -- "exit\r"
send -- "exit\r"
send -- "exit\r"
send -- "exit\r"
interact
脚本运行良好,但如果我从远程主机执行此脚本,则无法运行。
最好的问候。
【问题讨论】:
-
如果您提供了一些不起作用的期望代码 - 我们可以提供帮助,否则这个问题有点太笼统了。
-
嗨@favoretti。我用期望脚本编辑了我的帖子。问题不在于脚本。这工作正常,但如果我用远程主机执行期望不起作用(不要登录)。
-
所以当你用
ssh替换telnet时,它什么都不做?您是否尝试过使用ssh -T(不要分配PTY)。 -
哦,是的@favoretti 如果我使用 ssh -t 可以正常工作。谢谢!!
-
将其添加为答案。你用的是小写的
-t,对吧?所以基本上是强制PTY分配?