人生苦短,我用python-- Day9

目录                            

paramiko模块

  ssh工具

  scp工具

paramiko

作用:批量管理,该模块基于SSH用于连接远程服务器并执行相关操作

写一个基于用户名密码的ssh工具

 1 # Author:Sean sir
 2 # 导入paramiko模块,前提是本机首先要安装了paramiko模块,才能导入
 3 import paramiko
 4 # 创建SSH对象
 5 ssh = paramiko.SSHClient()
 6 # 允许连接不在know_hosts文件中的主机,当连接一个机器的时候,如果是第一次连接,那么系统会弹出此主机不再know_hosts的文件中
 7 # 询问是否继续,如果是的话,第二次在连接的时候就不会有这种情况了。
 8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 9 # 连接服务器
10 ssh.connect(hostname='192.168.16.85',port=22,username='root',password='zyw@123')
11 # 执行命令,执行命令会返回3个结果,包括标准输入、标准输出、标准错误,如果没有报错,
12 # 那么标准错误则为空;如果有错误,那么标准输出就为空
13 stdin,stdout,stderr = ssh.exec_command('df')
14 # 获取命令结
15 result = stdout.read()
16 # 关闭连接
17 ssh.close()
18 # 打印标准输出的结果
19 print(result.decode())

写一个基于公钥私钥的ssh工具

首先要生成一个公钥

 1 bogon:~ sean$ ssh-keygen 
 2 Generating public/private rsa key pair.
 3 Enter file in which to save the key (/Users/sean/.ssh/id_rsa): 
 4 /Users/sean/.ssh/id_rsa already exists.
 5 Overwrite (y/n)? y
 6 Enter passphrase (empty for no passphrase): 
 7 Enter same passphrase again: 
 8 Your identification has been saved in /Users/sean/.ssh/id_rsa.
 9 Your public key has been saved in /Users/sean/.ssh/id_rsa.pub.
10 The key fingerprint is:
11 SHA256:q+Wvt+pXBO+c32Lvha9jp85teBwdYAUpk1wP+IsnmPw sean@seandeMacBook-Pro-2.local
12 The key's randomart image is:
13 +---[RSA 2048]----+
14 |          . +++. |
15 |          .* +o  |
16 |           o= .. |
17 |            o. . |
18 |        S o+... o|
19 |         = o=o o.|
20 |        o ..o..+o|
21 |       +  oE .BoB|
22 |      ..=*o. +=@=|
23 +----[SHA256]-----+

生成公钥后,我们会在当前目录下的宿主目录下看到一个隐藏的ssh文件夹,文件夹中有两个文件,分别为:“id_rsa”和“id_rsa.pub”,前者是私钥,我们自己留着

后者为公钥我们把他传到想要远程的服务器的对应用户下即可了。

写一个支持公钥私钥的ssh工具:

 1 # Author:Sean sir
 2 # 导入paramiko模块,前提是本机首先要安装了paramiko模块,才能导入
 3 import paramiko
 4 # 创建SSH对象
 5 ssh = paramiko.SSHClient()
 6 # 指定本机的私钥目录
 7 key = paramiko.RSAKey.from_private_key_file('/Users/sean/.ssh/id_rsa')
 8 # 允许连接不在know_hosts文件中的主机,当连接一个机器的时候,如果是第一次连接,那么系统会弹出此主机不再know_hosts的文件中
 9 # 询问是否继续,如果是的话,第二次在连接的时候就不会有这种情况了。
10 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
11 # 连接服务器,把密码改成指定的key就可以了
12 ssh.connect(hostname='192.168.16.85',port=22,username='sean',pkey=key)
13 # 发送一个命令到服务器端
14 stdin,stdout,stderr = ssh.exec_command('ls -a')
15 # 获取执行结果
16 result = stdout.read()
17 # 打印执行结果
18 print(result.decode())
19 # 关闭连接
20 ssh.close()

写一个基于公钥私钥或用户名密码的连接工具

 1 # Author:Sean sir
 2 # 导入paramiko模块,前提是本机首先要安装了paramiko模块,才能导入
 3 import paramiko
 4 # 生成一个服务器地址,加上下面transport.connect方法,才真正和服务器连接上
 5 transport = paramiko.Transport(('192.168.16.85',22))
 6 # 如果想用基于秘钥的方式连接,就指定一下秘钥地址
 7 # private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 8 # 连接服务器,把密码改成指定的key就可以了
 9 # 如果想用秘钥的方式连接,使用下面的方式
10 # transport.connect(username='wupeiqi', pkey=private_key )
11 # 使用密码的方式进行连接
12 transport.connect(username='root',password='zyw@123')
13 # 创建一个sftp的对象
14 sftp = paramiko.SFTPClient.from_transport(transport)
15 # 把本地的xinzhiyu_tmp.txt文件,上传到服务器的/tmp/xinzhiyu_tmp.txt位置,并命名
16 # sftp.put('xinzhiyu_tmp.txt','/tmp/xinzhiyu_tmp.txt')
17 # 下载服务器的/tmp/test.py文件,到本地的当前目录,并命名为a.txt
18 sftp.get('/tmp/test.py','a.txt')
19 # 关闭连接
20 transport.close()
原文地址:https://www.cnblogs.com/xinzhiyu/p/5878347.html