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(文件)
有什么影响。
提前致谢
解决方案
推荐阅读
- android - 使用带有 android 文件管理器的 azure 文件共享 smb
- amazon-web-services - aws lambda:如何避免为每个部署创建 lambda 版本
- javascript - 我应该以哪种方式导入 React?
- python - CatBoost:我们是否过度拟合?
- c - 防止 C 可执行文件进入前台
- elasticsearch - Elasticsearch 搜索查询:带有 OR 门和 AND 门的嵌套查询
- html - 使用 CSS 如何按表格中的行和列进行排序?
- firebase - com.google.firebase.FirebaseException :发生内部错误。[ API 密钥无效。请传递有效的 API 密钥。]
- python - 从 csv 文件创建 n 个组
- javascript - 如何使用 JavaScript 使每列(独立地)可过滤 HTML?