paramiko模块

ssh远程连接

ssh root@192.168.189.132

退出远程连接

exit

传文件

scp -rp(r代表目录也拷贝,p代表权限)

scp -rp aa.txt root@192.168.189.132:/tmp/   拷贝aa.txt到192.168.189.132下的/tmp目录

堡垒机前戏

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

SSHClient

用于连接远程服务器并执行基本命令

基于用户名密码连接:

import paramiko,sys

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

#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)

#连接服务器
ssh.connect(hostname='192.168.189.131',port=22,username='root',password="123456")

#执行命令
stdin,stdout,stderr = ssh.exec_command('df')

#获取命令结果
result = stdout.read()
#打印命令
sys.stdout.write(result.decode())

ssh.close()  

第二种基于用户名密码连接:

import paramiko

if __name__ == '__main__':
    host_ip = '192.168.189.131'
    port = 22
    username1 = 'root'
    password1 = '123456'

    transport = paramiko.Transport(host_ip, port)
    transport.connect(username=username1, password=password1)

    ssh = paramiko.SSHClient()
    ssh._transport = transport   #ssh._transport指向transport
    stdin,stdout,stderr = ssh.exec_command("df")
    print(stdout.read().decode())

    transport.close()

  

SFTPClient

用于连接远程服务器并执行上传下载

基于用户名密码上传下载

import paramiko,os,sys

if __name__ == '__main__':
    host_ip = '192.168.189.131'
    port = 22
    username1 = 'root'
    password1 = '123456'

    t = paramiko.Transport(host_ip, port)
    t.connect(username=username1, password=password1)
    sftp = paramiko.SFTPClient.from_transport(t)
    remotepath = r'/cc.txt'          #这里一定要有文件名,不然会出现错误
    localpath = os.path.join(os.getcwd(),'markdown.md')
    print(localpath)
    sftp.put(localpath, remotepath)   #上传文件
    sftp.get("/cc.txt",os.path.join(os.getcwd(),"aa.txt"))  #下载文件
    t.close()

 通过ssh密钥来连接 

RSA-非对称密钥验证

公钥 publick key

私钥 private key

192.168.189.131   --------> 192.168.189.132

私钥                                        公钥

生成公钥私钥命令:ssh-keygen ,在/root/.ssh下

拷贝192.168.189.131的公钥到你要登陆的账户下(注意换行)的~目录下.ssh/authorized_keys(更简单的拷贝方法ssh-copy-id root@192.168.189.132)

 基于公钥密钥连接:

import paramiko,os,sys


# with open(r"C:UsersMrs shao.sshid_rsa","r") as f:
#     print(f.read())
private_key = paramiko.RSAKey.from_private_key_file(r"C:UsersMrs shao.sshid_rsa")  #私钥地址

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

#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#连接服务器

ssh.connect(hostname="192.168.189.131",port=22,username="root",pkey=private_key)  #用pkey

stdin,stdout,stderr = ssh.exec_command("df")

result = stdout.read()
print(result.decode())
ssh.close()

  

 基于公钥密钥上传下载

import paramiko,os,sys

private_key = paramiko.RSAKey.from_private_key_file(r"C:UsersMrs shao.sshid_rsa") #获取私钥并把公钥放到服务器


transport = paramiko.Transport("192.168.189.131",22)
transport.connect(username="root",pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

#将本地文件markdown.md上传至服务器的根目录下/from_window_file
# sftp.put("markdown.md","/from_window_file")

#将服务器文件/bb.txt下载到本地
sftp.get("/bb.txt","from_centos")
transport.close()

  

原文地址:https://www.cnblogs.com/zj-luxj/p/7460347.html