微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

期望脚本登录ssh并运行命令,密码取决于环境

如何解决期望脚本登录ssh并运行命令,密码取决于环境

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

#!/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”并且可以看到输出。如果我做得正确或者我可以做得更好,我可以获得什么帮助?

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

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

影响的东西。

提前致谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。