Unix 期望脚本检查和更改固件
您好,我正在尝试创建一个expect脚本来检查计算机是否已经有固件密码,如果它不允许密码更新。任何帮助都将不胜感激Unix 期望脚本检查和更改固件,unix,scripting,terminal,expect,script#,Unix,Scripting,Terminal,Expect,Script#,您好,我正在尝试创建一个expect脚本来检查计算机是否已经有固件密码,如果它不允许密码更新。任何帮助都将不胜感激 #!/usr/bin/expect #check to see if firmware password exists set verifyPassword 'spawn firmwarepasswd -check' #if no firmware password exists if {verifyPassword != ""} { spawn firmwarepa
#!/usr/bin/expect
#check to see if firmware password exists
set verifyPassword 'spawn firmwarepasswd -check'
#if no firmware password exists
if {verifyPassword != ""} {
spawn firmwarepasswd -setpasswd
expect "Enter new password:"
send "1sCrowStrong[\r";
expect "Re-enter new password:"
send "1sCrowStrong[\r";
puts "Password set"
interact
#if password 1 exists
} else if { verifyPassword == "isfr33d0mfr33?\r" } {
spawn firmwarepasswd -delete
expect "Enter password:"
send "isfr33d0mfr33?\r";
puts "Password Changed"
interact
#if password 2 exists
} else {
spawn firmwarepasswd -delete
expect "Enter password:"
send "rapt0r samm1j\r";
puts "Password Updates"
interact
}
我已经建立在给出的建议和答案的基础上,以下是我迄今为止所做的。但它仍然给我错误
#!/usr/bin/expect
#Create variable to check to see if firmwarepassword is set Y/N
set verifyPassword [exec firmwarepasswd -check]
#If no firmwarepasswd exists then hardset password
if {$verifyPassword eq "Password Enabled: No"}
{
spawn firmwarepasswd -setpasswd
expect {Enter new password:}
send {1sCrowStrong[\r};
expect "Re-enter new password:"
send {1sCrowStrong[\r};
expect eof
puts ["Password set"]
}
#If 2nd gen password exists then delete the password and hardset the designated password
else {$verifyPassword eq "Password Enabled: Yes"}
{
spawn firmwarepasswd -delete
expect "Enter password:"
send {isfr33d0mfr33?\r};
expect eof
puts ["Password Deleted"]
spawn firmwarepasswd -setpasswd
expect {Enter new password:}
send {1sCrowStrong[\r"}
expect {Re-enter new password:}
send {1sCrowStrong[\r};
expect eof
puts ["Password set"]
}
#If 3rd gen password exists then delete the password and hardset the designated password
if {$verifyPassword eq "Password Enabled: Yes"} {
spawn firmwarepasswd -delete
expect "Enter password:"
send {rapt0r samm1j\r};
expect eof
puts ["Password Deleted"]
spawn firmwarepasswd -setpasswd
expect "Enter new password:"
send {1sCrowStrong[\r};
expect "Re-enter new password:"
send {1sCrowStrong[\r};
expect eof
puts ["Password set"]
}
你要什么有点不清楚 无论如何,我有一些技巧可以帮助您编写脚本 您不应该为verifyPassword设置变量,而应该像这样生成check命令
spawn firmwarepasswd -check
expect {
"expected output here"{
//code
}
"next expected ouput" {
//code
}
"last expected output" {
//code
}
}
如果要向用户发送输出,请使用send\u user
e、 g
最后,将密码硬编码到脚本中是一个安全问题和糟糕的做法。如果您需要向用户请求密码,请在脚本中使用类似stty-echo的内容,这样您就可以安全地请求密码。我的印象是,
firmwarepasswd-check
完全不是交互式的,因此您可以这样做:
#!/usr/bin/expect
set verifyPassword [exec firmwarepasswd -check]
#if no firmware password exists
if {$verifyPassword eq ""} {
spawn firmwarepasswd -setpasswd
expect "Enter new password:"
send "1sCrowStrong[\r";
expect "Re-enter new password:"
send "1sCrowStrong[\r";
expect eof
puts "Password set"
#if password 1 exists
} elseif { $verifyPassword eq "isfr33d0mfr33?" } {
spawn firmwarepasswd -delete
expect "Enter password:"
send "isfr33d0mfr33?\r";
expect eof
puts "Password Changed"
#if password 2 exists
} else {
spawn firmwarepasswd -delete
expect "Enter password:"
send "rapt0r samm1j\r";
expect eof
puts "Password Updated"
}
我已经修复了语法错误并更改了条件以匹配您的评论。
send\u user
不会自动添加换行符。put没有什么问题:Expect是Tcl的一个扩展
#!/usr/bin/expect
set verifyPassword [exec firmwarepasswd -check]
#if no firmware password exists
if {$verifyPassword eq ""} {
spawn firmwarepasswd -setpasswd
expect "Enter new password:"
send "1sCrowStrong[\r";
expect "Re-enter new password:"
send "1sCrowStrong[\r";
expect eof
puts "Password set"
#if password 1 exists
} elseif { $verifyPassword eq "isfr33d0mfr33?" } {
spawn firmwarepasswd -delete
expect "Enter password:"
send "isfr33d0mfr33?\r";
expect eof
puts "Password Changed"
#if password 2 exists
} else {
spawn firmwarepasswd -delete
expect "Enter password:"
send "rapt0r samm1j\r";
expect eof
puts "Password Updated"
}