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的告警:

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

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Python 中从 Windows 主机拷贝文件到 Linux 主机,你可以使用 Paramiko 库来实现 SSH 连接和文件传输。以下是一个示例代码: ```python import paramiko def copy_file_windows_to_linux(source_file, destination_file, windows_host, windows_user, windows_password, linux_host, linux_user, linux_password): # 创建 SSH 客户端 ssh_client = paramiko.SSHClient() ssh_client.load_system_host_keys() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 连接 Windows 主机 ssh_client.connect(windows_host, username=windows_user, password=windows_password) # 使用 SFTP 进行文件传输 sftp = ssh_client.open_sftp() # 从 Windows 主机下载文件到本地 sftp.get(source_file, destination_file) # 关闭 SFTP 连接 sftp.close() # 关闭 SSH 连接 ssh_client.close() # 创建 SSH 客户端 ssh_client = paramiko.SSHClient() ssh_client.load_system_host_keys() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 连接 Linux 主机 ssh_client.connect(linux_host, username=linux_user, password=linux_password) # 使用 SFTP 进行文件传输 sftp = ssh_client.open_sftp() # 将文件上传到 Linux 主机 sftp.put(destination_file, destination_file) # 关闭 SFTP 连接 sftp.close() # 关闭 SSH 连接 ssh_client.close() print("文件从 Windows 主机成功复制到 Linux 主机!") except Exception as e: print("连接或文件上传到 Linux 主机时出现错误:", str(e)) except Exception as e: print("连接或文件下载到 Windows 主机时出现错误:", str(e)) # 调用函数进行文件拷贝 copy_file_windows_to_linux('C:\\path\\to\\file.txt', '/path/on/linux/file.txt', 'windows_host', 'windows_user', 'windows_password', 'linux_host', 'linux_user', 'linux_password') ``` 在上面的代码中,你需要将 `'C:\\path\\to\\file.txt'` 替换为实际的 Windows 文件路径,`'/path/on/linux/file.txt'` 替换为实际的 Linux 目标路径,以及 `'windows_host'`、`'windows_user'`、`'windows_password'`、`'linux_host'`、`'linux_user'` 和 `'linux_password'` 替换为实际的主机和凭据信息。 这段代码使用 Paramiko 库创建 SSH 连接,然后使用 SFTP 进行文件传输。首先,它从 Windows 主机下载文件到控制节点,然后将文件上传到 Linux 主机。最后,它在控制台打印成功消息或错误消息。 确保在运行代码之前已经安装了 Paramiko 库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值