paramiko 模块

命令执行

用户名密码进行连接

import paramiko

ssh = paramiko.SSHClient() # 创建ssh对象

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机,并将它添加进允许连接不在know_hosts文件中的主机

ssh.connect(hostname="192.168.121.129",username="root",password="123456") # 连接远程

stdin, stdout, stderr = ssh.exec_command("pwd") # 执行命令

print(type(stdin))
print(stdout.read()) # 获取标准输出
print(stderr.read()) # 获取错误输出

ssh.close()

秘钥连接

import paramiko

private_key = paramiko.RSAKey.from_private_key_file("id_rsa") #  导入秘钥

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# ssh.connect(hostname="192.168.121.129",username="root",key_filename="id_rsa") #可以直接设置秘钥文件路径
ssh.connect(hostname="192.168.121.129",username="root",pkey=private_key)

stdin, stdout, stderr = ssh.exec_command('ls')
print(stdout.read())

ssh.close()

秘钥对象除了通过文件来创建还可以通过字符串来创建

import paramiko

with open("id_ras") as f:
    private_key_string = f.read()
private_key = paramiko.RSAKey.from_private_key(private_key_string)

文件传输

文件传输, 文件传输使用paramiko.SFTPClient连接, 而不是SSH,

import paramiko


transport = paramiko.Transport(("192.168.121.129",22))
transport.connect(username="root", password="123456") # 这里也可以设置pkey, 通过秘钥进行连接


sftp = paramiko.SFTPClient.from_transport(transport)
# SSH也可以使用transport
# ssh = paramiko.SSHClient()
# ssh._transport = transport

sftp.put("本地文件","目标路径") # 上传
sftp.get("目标路径","本地路径") # 下载

sftp.close()

实现堡垒机模式下的远程执行命令

我们可以利用paramiko的invoke_shell机制来实现通过堡垒机实现服务器操作

posted @ 2019-04-16 08:46  瓜田月夜  阅读(133)  评论(0编辑  收藏  举报