s Haproxy(object):
7
8 def __init__(self):
9 self.host = '172.16.103.191'
10 self.port = 22
11 self.username = 'wupeiqi'
12 self.pwd = '123'
13 self.__k = None
14
15 def create_file(self):
16 file_name = str(uuid.uuid4())
17 with open(file_name,'w') as f:
18 f.write('sb')
19 return file_name
20
21 def run(self):
22 self.connect()
23 self.upload()
24 self.rename()
25 self.close()
26
27 def connect(self):
28 transport = paramiko.Transport((self.host,self.port))
29 transport.connect(username=self.username,password=self.pwd)
30 self.__transport = transport
31
32 def close(self):
33
34 self.__transport.close()
35
36 def upload(self):
37 # 连接,上传
38 file_name = self.create_file()
39
40 sftp = paramiko.SFTPClient.from_transport(self.__transport)
41 # 将location.py 上传至服务器 /tmp/test.py
42 sftp.put(file_name, '/home/wupeiqi/tttttttttttt.py')
43
44 def rename(self):
45
46 ssh = paramiko.SSHClient()
47 ssh._transport = self.__transport
48 # 执行命令
49 stdin, stdout, stderr = ssh.exec_command('mv /home/wupeiqi/tttttttttttt.py /home/wupeiqi/ooooooooo.py')
50 # 获取命令结果
51 result = stdout.read()
52
53
54 ha = Haproxy()
55 ha.run()
Demo
堡垒机的实现
实现思路:
堡垒机执行流程:
- 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码)
- 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表
- 用户选择服务器,并自动登陆
- 执行操作并同时将用户操作记录
注:配置.brashrc实现ssh登陆后自动执行脚本,如:/usr/bin/python /home/wupeiqi/menu.py
实现过程
步骤一,实现用户登陆
1
2
3
4
5
6
7
8
|
import
getpass
user
=
raw_input
(
'username:'
)
pwd
=
getpass.getpass(
'password'
)
if
user
=
=
'alex'
and
pwd
=
=
'123'
:
print
'登陆成功'
else
:
print
'登陆失败'
|
步骤二,根据用户获取相关服务器列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
dic
=
{
'alex'
: [
'172.16.103.189'
,
'c10.puppet.com'
,
'c11.puppet.com'
,
],
'eric'
: [
'c100.puppet.com'
,
]
}
host_list
=
dic[
'alex'
]
print
'please select:'
for
index, item
in
enumerate
(host_list,
1
):
print
index, item
inp
=
raw_input
(
'your select (No):'
)
inp
=
int
(inp)
hostname
=
host_list[inp
-
1
]
port
=
22
|
步骤三,根据用户名、私钥登陆服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
tran
=
paramiko.Transport((hostname, port,))
tran.start_client()
default_path
=
os.path.join(os.environ[
'HOME'
],
'.ssh'
,
'id_rsa'
)
key
=
paramiko.RSAKey.from_private_key_file(default_path)
tran.auth_publickey(
'wupeiqi'
, key)
chan
=
tran.open_session()
chan.get_pty()
chan.invoke_shell()
|
|