【python】paramiko远程操作Linux

背景说明:

我们在开发服务器或运维过程中,需要登录Linux进行下载数据、上传数据、执行脚本等操作。如果你习惯了windows系统,不希望用使用Xshell或者Mobax或者Linux操作系统进行操作,那么python提供了一个非常方便的第三方库,供您在windows下远程登录Linux。这里总结了一下非公钥密钥操作linux的几种方法:

关注“测试开发自动化” 弓中皓,获取源码)


1. 远程登陆

import paramiko

ssh = paramiko.SSHClient()                                     # 创建SSH对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())      # 允许连接不在know_hosts文件中的主机。即:解决问题:如果之前没有,连接过的ip,会出现选择yes
# 连接服务器(根据自己的情况选择)
ssh.connect(hostname='192.168.xxx.xxx', username='xxx', password='xxx')     # 用户名和密码登录
stdin, stdout, stderr = ssh.exec_command('ls -lh')
result = stdout.read().decode('utf-8')   # 获取命令结果
print(result)                            # 输出返回的结果
ssh.close()                              # 关闭连接

2. 文件上传下载

方法一:关注“测试开发自动化” 弓中皓,获取源码)

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.xxx.xxx', username='xxxx', password='xxxx')

sftp = ssh.open_sftp()
sftp.put(r'D:\xxxx\xxxx.sh', '/home/xxxx/xxxx.sh')       # 将windows文件上传至Linux
sftp.get('/home/xxxx/xxxx.sh', r'D:\xxxx\xxxx.sh')       # 将Linux文件下载至windows

sftp.close()

stdin, stdout, stderr = ssh.exec_command('sh /home/xxxx/xxxx.sh')    # 运行sh文件
result = stdout.read().decode('utf-8')
print(result)
ssh.close()

方法二:关注“测试开发自动化” 弓中皓,获取源码)

import paramiko

#获取Transport实例
tran = paramiko.Transport("192.168.xxx.xxx", 22)
#连接SSH服务端
tran.connect(username="xxx", password="xxx")
#获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(tran)
#设置上传的本地/远程文件路径
localpath= r"D:\xxxx\xxxx.py"    #本地文件路径
remotepath= r"/home/xxxx/xxxx.py"  #上传对象保存的文件路径
#执行上传动作
sftp.put(localpath, remotepath)
# 执行下载动作
sftp.get(remotepath, localpathwen)
tran.close()

3. sudo权限:

关注“测试开发自动化” 弓中皓,获取源码)

import paramiko

hostname = "192.168.xxx.xxx"
username = 'ubuntu'
password = 'ubuntu'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname, username=username, password=password)

stdin, stdout, stderr = ssh.exec_command('sudo reboot', get_pty=True)  # sudo权限
stdin.write('ubuntu'+'\n')   # 输入密码

result = stdout.read().decode('utf-8')
print(result)
ssh.close()

4. 批量链接

关注“测试开发自动化” 弓中皓,获取源码)

import paramiko
from paramiko.ssh_exception import NoValidConnectionsError
from paramiko.ssh_exception import AuthenticationException


def connect(cmd, hostname,port=22,username='root',passwd='westos'):
    ##1.创建一个ssh对象
    client = paramiko.SSHClient()
    #2.解决问题:如果之前没有,连接过的ip,会出现选择yes或者no的操作,
    ##自动选择yes
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #3.连接服务器
    try:
        client.connect(hostname=hostname, port=port, username=username, password=passwd)
        print('正在连接主机%s......'%(hostname))

    except NoValidConnectionsError as e: ###用户不存在时的报错
        print("连接失败")
    except AuthenticationException as t: ##密码错误的报错
        print('密码错误')
    else:
        #4.执行操作
        stdin,stdout, stderr = client.exec_command(cmd)
        #5.获取命令执行的结果
        result=stdout.read().decode('utf-8')
        print(result)
        #6.关闭连接
    finally:
        client.close()

# 为提高效率,此处建议使用多线程
connect('ls -h', hostname='192.168.xxx.xxx', username='Xxxx', passwd='xxx')
connect('ls -h', hostname='192.168.xxx.xxx', username='xxxx', passwd='xxxx')

如果对您有帮助,点个关注再走吧!!!

猜你喜欢

转载自blog.csdn.net/weixin_44244190/article/details/129423102