【发布时间】:2023-03-30 08:40:01
【问题描述】:
我需要自动化处理远程设备的流程,
步骤如下
- 远程登录
- 输入用户名
- ifconfig eth0 | grep 'inet 地址' |剪切 -d ':' -f 2 |剪切 -d ' ' -f 1
- 记下显示的 ip 并使用该 ip 地址执行其余过程。
已知 ip 是 telnet_ip,我想检索可以 ssh 进入的 ip 地址。
我想将这四个步骤自动化到一个名为 get_ip 的函数中,该函数会回显 IP 地址。我想按如下方式使用这个功能
SSH_IP=$(get_ip 127.0.0.1 1000)
我环顾四周,发现可以使用expect。这个函数我写了
function get_ip(){
expect << EOF
spawn telnet $1 $2
expect -ex "Escape character is '^]'."
send "\r"
expect {
-re ".*login: " {
send "root\r"
}
}
expect -re ".*root:~# "
send "ifconfig eth0 | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1\r"
expect eof
send "\x1b\r"
expect "telnet>"
send "q\r"
puts "Address is $IPADDR"
EOF
}
运行这个函数,我在屏幕上看到了 IP 地址,但它没有在变量SSH_IP 中捕获。
我在两个方面需要帮助:
1.我该怎么做才能让SSH_IP包含IP地址。
2. 我怎样才能让expect 默默地做这一切并返回结果?
如果有其他方法可以达到同样的目标,请告诉我。
【问题讨论】:
-
旁注 -
eth0已经消失了一段时间,所以硬编码看起来......乐观。该命令在我的 Linux 机器上返回空白,这既是因为 eth0 不存在,也是因为如果我选择现有接口,inet addr不会出现在输出中。