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机制来实现通过堡垒机实现服务器操作

浙公网安备 33010602011771号