Python 使用 paramiko上传文件 及 操作 Linux

参考:

Python模块学习 - Paramiko

https://www.cnblogs.com/xiao-apple36/p/9144092.html>

代码功能:
将指定的xxx.deb文件上传至Linux服务器中 /home/xxx.deb
执行ls -l /home/xxx.deb 检查文件是否存在,即是否上传成功
再执行 dpkg -i /home/xxx.deb 进行安装
安装完成后,再执行 dpkg -s xxx检查是否安装成功
xxx 即为软件包名



import paramiko

hostname = '192.168.1.111'   #linux主机IP地址
port = 22   #端口

username = 'root'   #用户名
password = 'test'    #密码

localdeb = r'E:\xxx.deb' #Windows下文件路径(需复制的文件)

debpath = '/home/' #Linux目录
debname = 'xxx.deb' #软件包完整名称

#连接Linux
transport=paramiko.Transport((hostname,port))
transport.connect(username=username, password=password)

#将本地文件传至Linux中
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(localdeb, debpath + debname)

client= paramiko.SSHClient()
client._transport=transport

#列出Linux目录中的文件,以便检查是否传送成功
print('上传完成!' + debpath +' 下有如下文件:')
lscmd = 'ls -l ' + debpath;
stdin, stdout, stderr = client.exec_command(lscmd)
print(stdout.read().decode('utf-8'))

#在Linux上安装deb软件
print('安装 ' + debpath + debname)

installcmd = 'dpkg -i ' + debpath + debname
stdin, stdout, stderr = client.exec_command(installcmd)
print(stdout.read().decode('utf-8'))

#检查Linux系统中软件是否安装成功
print('安装结果: ')
stdin, stdout, stderr = client.exec_command('dpkg -s xxx')
print(stdout.read().decode('utf-8'))

client.close()  

在Ubuntu中,以非root用户登陆,需执行root权限

如:

删除/ 根目录下的 code_1.31.1-1549938243_amd64.deb 则提示权限不足

xx@ubuntu:/$ rm code_1.31.1-1549938243_amd64.deb 
rm: cannot remove 'code_1.31.1-1549938243_amd64.deb': Permission denied
xx@ubuntu:/$ sudo rm code_1.31.1-1549938243_amd64.deb 
[sudo] password for xx: 

提升权限执行操作,则需要输入密码

sudo rm code_1.31.1-1549938243_amd64.deb

此时应用如下命令,并将密码输入输入流中:

stdin, stdout, stderr = self.__client.exec_command('sudo -S rm /code_1.31.1-1549938243_amd64.deb ')
stdin.write(self.__psw + '\n')
stdin.flush()
.
.
遇到的坑:
  • paramiko使用出现CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePubl…
    https://www.jianshu.com/p/15a4fd6fa372

使用paramiko连接交换的时候出现CryptographyDeprecationWarning的告警:

python交互式环境下测试:

import cryptography   #没有问题,可以正常导入
help(cryptography)     #查看版本是2.6.1

本机执行:

pip install cryptography==2.4.2
另 参考:

python paramiko CryptographyDeprecationWarning-云栖社区-阿里云
https://yq.aliyun.com/articles/690717
原因
paramiko 2.4.2 依赖 cryptography,而最新的cryptography==2.5里有一些弃用的API。
解决
删掉cryptography 2.5,安装2.4.2,就不会报错了。

pip uninstall cryptography==2.5
pip install cryptography==2.4.2

Python 使用 paramiko上传文件 及 操作 Linux_第1张图片

你可能感兴趣的:(python)