【模块】:paramiko

一、堡垒机前戏

开发堡垒机之前,先来学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作

模块安装

C:Program FilesPython 3.5Scripts>pip3.5.exe install paramiko
如果报错pip install --upgrade pip 更新下pip继续上步安装就哦了

ssh客户端

创建用于连接远程服务器的客户端并执行基本命令

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname="192.168.20.219",port=22,username="root",password="zyw@123")

# 执行命令
stdin,stdout,stderr = ssh.exec_command("df")
# 获取命令结果
result = stdout.read()
# 打印输出
print(result.decode())

# 关闭连接
ssh.close()

# 程序输出
# Filesystem           1K-blocks    Used Available Use% Mounted on
# /dev/mapper/VolGroup-lv_root
#                       48966472 2169976  44302444   5% /
# tmpfs                   502176       0    502176   0% /dev/shm
# /dev/sda1               487652   28375    433677   7% /boot
sshclient

基于公钥密钥连接

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname="192.168.20.219",port=22,username="root",pkey=private_key)

# 执行命令
stdin,stdout,stderr = ssh.exec_command("df")
# 获取命令结果
result = stdout.read()
# 打印输出
print(result.decode())

ssh.close()

# 程序输出
# Filesystem           1K-blocks    Used Available Use% Mounted on
# /dev/mapper/VolGroup-lv_root
#                       48966472 2169976  44302444   5% /
# tmpfs                   502176       0    502176   0% /dev/shm
# /dev/sda1               487652   28375    433677   7% /boot
sshclient-rsa

sftp客户端

创建用于连接远程服务器的客户端并并进行上传、下载

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian

import paramiko

transport = paramiko.Transport(("192.168.20.219",22))
transport.connect(username="root",password="zyw@123")

sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件
sftp.put("location.py","/tmp/test.py")
# 下载文件
sftp.get("location.py","/tmp/test.py")

transport.close()
sftpclient
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian

import paramiko

private_key = paramiko.RSAKey.from_private_key_file("id_rsa")
transport = paramiko.Transport(("192.168.20.219",22))
transport.connect(username="root",pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件
sftp.put("location.py","/tmp/test.py")
# 下载文件
#sftp.get("location.py","/tmp/test.py")

transport.close()
sftpclient-rsa

创建密钥

[root@bogon tmp]# ssh-keygen -t rsa        

上面的命令在服务端linux上执行的,用root登录的,会在/root/.ssh/目录下生产id.rsa(私钥)、id.rsa.pub(公钥)。把id.rsa拷贝到客户端(本次测试的是windows),id.rsa.pub改名为authorized_keys依然放到目录/root/.ssh/目录下

私钥放到客户端,公钥放到要免密码登录的服务器上,多台就放置到多台上!!!这个我之前竟然忘了啊啊啊啊啊啊!!!

原文地址:https://www.cnblogs.com/lianzhilei/p/5885386.html