Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 期望脚本检查和更改固件_Unix_Scripting_Terminal_Expect_Script# - Fatal编程技术网

Unix 期望脚本检查和更改固件

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

您好,我正在尝试创建一个expect脚本来检查计算机是否已经有固件密码,如果它不允许密码更新。任何帮助都将不胜感激

#!/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"

}