目录
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()