在 bash 中使用 expect 通过 SCP 更新 IOS
Updating IOS's via SCP in bash with expect
美好的一天。我正在尝试 create/run 一个脚本,该脚本允许我将更新的 IOS 从服务器发送到我的网络设备。当我在“:flash”命令之前输入手动 IP 地址时,以下代码有效。
#!/user/bin/expect
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin"
set pw xxxxxxxxxxxxxxxxxxx
spawn scp $IOSroot 1.1.1.1:flash:/c3750e-universalk9-mz.150-2.SE10a.bin
expect "TACACS Password:"
send "$pw\r"
interact
那里的代码工作得很好,符合预期。当我尝试将名为 "ioshost" 的文件与 IP 列表一起使用并在此脚本中使用它来获得一些自动化时,问题就出现了。我已经尝试了各种方法来让它工作。其中一些如下:
设置变量
IPHosts=$(cat ioshost)
set IPHost 'cat ioshost'
在尝试使用 read/do 命令的同时...
while read line; do
spawn scp $IOSroot $line:flash:/c3750e-universalk9-mz.150-2.SE10a.bin
done < ioshost
None 这些似乎有效,我正在寻找指导。请注意,我知道设置密码不是最佳做法,但不允许像其他文章中提到的那样设置 RSA 密钥,所以我不得不这样做。
感谢您的宝贵时间。
您可以使用一个 Expect 脚本和一个 Bash 脚本。
首先稍微更新一下您的 Expect 脚本:
#!/user/bin/expect
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin"
set pw xxxxxxxxxxxxxxxxxxx
spawn scp $IOSroot [lindex $argv 0]:flash:/c3750e-universalk9-mz.150-2.SE10a.bin
# ^^^^^^^^^^^^^^^^
expect "TACACS Password:"
send "$pw\r"
interact
然后写一个简单的Bashfor
循环:
for host in $(<ioshost); do
expect /your/script.exp $host
done
美好的一天。我正在尝试 create/run 一个脚本,该脚本允许我将更新的 IOS 从服务器发送到我的网络设备。当我在“:flash”命令之前输入手动 IP 地址时,以下代码有效。
#!/user/bin/expect
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin"
set pw xxxxxxxxxxxxxxxxxxx
spawn scp $IOSroot 1.1.1.1:flash:/c3750e-universalk9-mz.150-2.SE10a.bin
expect "TACACS Password:"
send "$pw\r"
interact
那里的代码工作得很好,符合预期。当我尝试将名为 "ioshost" 的文件与 IP 列表一起使用并在此脚本中使用它来获得一些自动化时,问题就出现了。我已经尝试了各种方法来让它工作。其中一些如下:
设置变量
IPHosts=$(cat ioshost)
set IPHost 'cat ioshost'
在尝试使用 read/do 命令的同时...
while read line; do
spawn scp $IOSroot $line:flash:/c3750e-universalk9-mz.150-2.SE10a.bin
done < ioshost
None 这些似乎有效,我正在寻找指导。请注意,我知道设置密码不是最佳做法,但不允许像其他文章中提到的那样设置 RSA 密钥,所以我不得不这样做。
感谢您的宝贵时间。
您可以使用一个 Expect 脚本和一个 Bash 脚本。
首先稍微更新一下您的 Expect 脚本:
#!/user/bin/expect
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin"
set pw xxxxxxxxxxxxxxxxxxx
spawn scp $IOSroot [lindex $argv 0]:flash:/c3750e-universalk9-mz.150-2.SE10a.bin
# ^^^^^^^^^^^^^^^^
expect "TACACS Password:"
send "$pw\r"
interact
然后写一个简单的Bashfor
循环:
for host in $(<ioshost); do
expect /your/script.exp $host
done