Fabric 自动响应(替代pexpect)

简介: Fabric 自动响应(替代pexpect)

超级用户(Superuser privileges)和自动响应(auto-response)

Fabric可以跑超级用户的命令,也就是sudo我感觉并不稀奇,通过run接口就可以执行sudo命令了

在我比菜狗还菜的时候,我就已经兴冲冲的去实验了,下面的例子虽然可以用,但在实际生产当中会不满足一些需求,慢慢看。

>>> from fabric import Connection
>>> c = Connection('db1')
>>> c.run('sudo useradd mydbuser', pty=True)
[sudo] password:
<Result cmd='sudo useradd mydbuser' exited=0>
>>> c.run('id -u mydbuser')
1001
<Result cmd='id -u mydbuser' exited=0>

那该如何满足自动交互的需求?

EXPECT脚本了解一下

#!/usr/bin/expect
#File Transfer Script V0.1
set local_file  [lindex $argv 0]
set name        [lindex $argv 1]
set timeout 40
spawn ssh root@host
expect "*assword:"
send "woaini\r"
expect "root@VM-4-16-centos"
send "source /home/env/bin/activate ; cd ~/tmp ; nohup python auto_deploy.py -d $local_file -name $name &\r"
expect "root@VM-4-16-centos"
send "exit\n"

注意这不是基于bin/bash的这是依赖bin/expect的。大致的场景就是自动登录然后部署

脚本spawn了一个新的会话,然后:

  1. ssh登录remote server
  2. 终端会需要你输入密码,expect脚本匹配到了password后就会自动输入密码 , \r相当于回车
  3. 下一次期待就是进入远程server之后了,这里建议大家去查一下通配所有终端方案的正则怎么写,想我举例这样写死的话,灵活性不高。4. nohup让该条命令在后台执行,不会因为退出当前的session而中断。

pexpect

python当然也有对expect行为的支持有一个包

叫做Pexpect,安装:

pip install pexpect

Fabric的自动交互

当然这都是题外话,也是自动交互的一种实现。好的是,我发现Fabric也帮我们封装好了

>>> from invoke import Responder
>>> from fabric import Connection
>>> c = Connection('host') 
>>> sudopass = Responder(
...     pattern=r'\[sudo\] password:',
...     response='mypassword\n',
... )
>>> c.run('sudo whoami', pty=True, watchers=[sudopass])
[sudo] password:
root
<Result cmd='sudo whoami' exited=0>

看他的这段用例能发现,他也能匹配password,并且自动填写response也就是密码进去,不过这里是明文填密码的,实际生产中是需要加密的。


相关文章
|
6月前
|
运维 Shell 网络安全
第十八章 Python批量管理主机(paramiko、fabric与pexpect)
第十八章 Python批量管理主机(paramiko、fabric与pexpect)
|
开发框架 .NET 区块链
Hyperledger fabric部署链码(五)初始化与链码升级
fabric部署chaincode-go(智能合约)系列之五
201 0
|
测试技术 Go 区块链
Hyperledger fabric 测试环境部署
Hyperledger fabric 测试环境部署及相关问题解答
266 3
Hyperledger fabric 测试环境部署
|
JavaScript 测试技术 Go
Hyperledger fabric部署链码(一)打包链码
fabric部署chaincode-go(智能合约)系列之一
244 0
|
存储 JSON 安全
Hyperledger fabric智能合约编写(一)
本篇文章主要对链码编写的主要思路和部分API进行梳理。
174 1
|
区块链
Hyperledger fabric部署链码(二)安装链码到fabric
fabric部署chaincode-go(智能合约)系列之二
147 1
|
Go API 区块链
Hyperledger Fabric相关概念介绍
在学习Hyperledger Fabric的过程中,初步对相关概念的了解。
257 0
Hyperledger Fabric相关概念介绍