Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
除脚本登录(ssh)和运行命令外,密码取决于环境_Ssh_Foreach_Switch Statement_Expect - Fatal编程技术网

除脚本登录(ssh)和运行命令外,密码取决于环境

除脚本登录(ssh)和运行命令外,密码取决于环境,ssh,foreach,switch-statement,expect,Ssh,Foreach,Switch Statement,Expect,我在论坛上搜索了一些想法,并找到了我脚本运行的某个地方,有时会出现一些问题。我试图解释一些事情。基本上,我试图运行一个带有服务器名和文件的脚本,它将被推送到服务器上。到达那里后,我需要将其移动到适当的位置,然后更改其许可证。以下是我到目前为止的情况: #!/usr/bin/expect -f set timeout 5 set HOST [exec cat serverlist.txt] set FILE [lindex $argv 0] set LOC1 "/tmp/" s

我在论坛上搜索了一些想法,并找到了我脚本运行的某个地方,有时会出现一些问题。我试图解释一些事情。基本上,我试图运行一个带有服务器名和文件的脚本,它将被推送到服务器上。到达那里后,我需要将其移动到适当的位置,然后更改其许可证。以下是我到目前为止的情况:

#!/usr/bin/expect -f
set timeout 5
set HOST [exec cat serverlist.txt]
set FILE [lindex $argv 0]
set LOC1 "/tmp/"
set LOC2 "/etc/sudoers.d/"
set USERS "testuser"
set PASSWORD "testpass"
foreach HOSTS $HOST {
spawn rsync $FILE $USERS@$HOSTS:$LOC1
expect {
    "*fingerprint*" {
        send "yes\r"
        exp_continue
    }
    "*assword*" {
        send "$PASSWORD\r"
        exp_continue
    }
}
spawn ssh $USERS@$HOSTS
expect {
    "*assword" {
        send "$PASSWORD\r"
    }
}
expect {
    "> " {
        send "sudo mv $LOC1$FILE $LOC2\r"
    }
}
expect {
    "*assword*" {
        send "$PASSWORD\r"
    }
}
expect {
    "> " {
        send "sudo chown root.root $LOC2${FILE}\r"
    }
}
expect {
    "> " {
        send "sudo chmod 440 $LOC2${FILE}\r"
    }
}
expect {
    "> " {
        send "visudo -c\r"
    }
}
}
expect eof
我们有多个环境,您必须对每个环境使用不同的密码。如果有一种方法可以逃逸密码中的非法字符,那么也可以合并。我有一些脚本运行不正常的实例,即使我有正确的通配符。我知道这一点的方式是在命令前面运行“expect-df”,并可以看到输出。如果我做得好或者做得更好,我能得到什么帮助

我试图简化代码,使其易于复制。我拿出了“Environment piece”,它基本上是基于环境设置用户的。(DEV、QA、PD等…)它的作用是将sudoers文件复制到/tmp/上,然后将其移动到/etc/sudoers.d/,更改权限,然后运行一个检查“visudo-c”。我很想让这个模块化,这样它可以用于不止一件事

示例:./example.exp-l(用户)-h(服务器或带有服务器的文件)-f(文件)

有这种影响的东西


提前感谢

我无法运行您的脚本。您是否有一个?Expect使用Tcl。你可以参考Tcl的。我已经修改了脚本,希望它能被其他人运行和测试。你有什么问题?