#Python3 paramiko

本文详细介绍了Python Paramiko库的使用方法,包括SSH密码登录、免密登录及SFTP文件传输。通过实例展示了如何执行远程命令和进行文件传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python paramiko

概述
关于ssh登录python的paramiko库也提供了ssh的登录功能,我们可以通过paramiko库更加深入的了解ssh登录

使用方式

密码登录

import paramiko
#new出来一个ssh客户端
ssh_client = paramiko.SSHClient()
#ssh需要询问是否加入key,为了不让那一步把程序卡住,这个条件会设置自动添加key
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#让ssh客户端去使用账户密码连接远程服务器
ssh_client.connect('127.0.0.1',22,'canvas','tusbasa1')
#执行命令
cmd = 'ls /;pwd'
#解包标准输出
stdin,stdout,stderr = ssh_client.exec_command(cmd)

for line in stdout:
    print(line)

免密登录

import paramiko

#找到公钥的地址
private_key_path = '/Users/canvas/.ssh/id_rsa'
#把公钥加载进入paramiko框架
key = paramiko.RSAKey.from_private_key_file(private_key_path)
#初始化paraiko客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#ssh免密链接
ssh.connect('111.231.203.174', 22, 'root', key)
#打印出标准输出
stdin, stdout, stderr = ssh.exec_command('df -h')
print(stdout.read())
ssh.close()

文件传输

import paramiko
#文件传输链接
t = paramiko.Transport('127.0.0.1', 22)
t.connect(username='rimi', password='mima')
#传输文件
sftp = paramiko.SFTPClient.from_transport(t)

#from to
sftp.put('test.logs', '/Users/canvas/test_log.log')
t.close()

sftp.get('/Users/canvas/test_log.log', 'log2.log')
t.close() ```

免密传输

private_key_path = '/Users/canvas/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path)

t = paramiko.Transport(('111.231.203.174', 22))
t.connect(username='root', pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('test.logs', '/root/log.log')

t.close()
<think>好的,我现在需要帮助用户解决Python3中使用Paramiko库时遇到的各种报错的解决方案。用户之前提到了导入paramiko时报错找不到指定程序的问题,现在他进一步询问常见报错及解决方案。根据提供的引用和之前的对话,我需要整理出常见的错误及其解决方法。 首先,回顾用户提供的引用内容: 引用[1]提到连接时出现“Authentication timeout”,可能涉及认证问题或网络配置。引用[2]是Python2的弃用警告,但用户现在关心Python3,可能需要注意兼容性。引用[3]指出环境变量问题,导致远程命令找不到路径。引用[4]是关于安装paramiko时缺少Rust编译器,通过升级pip解决。用户现在的问题集中在Python3Paramiko常见报错,我需要结合之前的回答和引用内容,整理出几个典型错误场景,并给出对应的解决方案。首先,我需要列出常见的Paramiko错误: 1.认证失败或超时(如引用[1])2.依赖库缺失或DLL加载失败(如用户之前的问题) 3.环境变量问题导致远程命令无法执行(如引用[3])4.安装时的编译错误(如引用[4]提到的Rust编译器问题)5.网络连接问题(如SSH配置、防火墙等) 6.不兼容的Python版本(虽然用户现在用Python3,但可能存在版本不匹配) 7.其他依赖项如Cryptography的问题针对每个错误,需要给出具体原因和解决步骤。例如:-认证超时可能是凭证错误、SSH服务未运行、端口问题等。解决方案包括检查凭证、确认SSH服务状态、检查防火墙设置等。 -环境变量问题需要设置远程PATH,或者在命令中使用绝对路径。 -安装问题可能需要安装必要的编译工具或依赖库,如引用[4]中的升级pip或安装Rust。此外,需要确保回答结构清晰,分点列出每个问题,并附上代码示例或命令。同时,按照用户的要求,在引用部分添加引用标识,如[^1]、[^3]等。 还要注意用户提到的系统级指令,如LaTeX格式的正确使用,不过在这个问题中可能涉及较少数学公式,但需要检查是否有需要的地方。例如,如果有版本号或路径表达式,可能不需要LaTeX,但需保持中文回答。最后,生成相关问题,帮助用户进一步排查问题,如询问如何调试SSH连接、如何设置远程环境变量等。 现在需要组织这些内容,确保符合用户的要求,结构清晰,解决方案具体可行,并包含相关引用。</think>### Python3 Paramiko常见报错及解决方案 #### 1. **认证超时错误** **现象**: ```python paramiko.ssh_exception.AuthenticationException: Authentication timeout ``` **原因**: - SSH服务未启用或端口被防火墙拦截 - 用户名/密码错误 - 服务端SSH配置限制(如MaxStartups限制)[^1] **解决方案**: ```python # 添加超时参数和密钥验证 client = paramiko.SSHClient() client.connect(hostname=&#39;192.168.xxx.xxx&#39;, port=22, username=&#39;root&#39;, password=&#39;test&#39;, timeout=15, # 设置超时时间 allow_agent=False) # 禁用代理验证 ``` - 使用`telnet 192.168.xxx.xxx 22`验证端口连通性 - 检查服务端`/etc/ssh/sshd_config`配置 --- #### 2. **DLL加载失败** **现象**: ```python ImportError: DLL load failed while importing _bcrypt ``` **原因**: - 缺少Microsoft Visual C++运行库 - Cryptography依赖损坏 **解决方案**: ```bash # 安装VC++运行库后重新安装依赖 pip uninstall cryptography paramiko bcrypt pip install --only-binary=:all: cryptography pip install paramiko ``` - 下载[VC++ Redistributable](https://aka.ms/vs/16/release/vc_redist.x64.exe) --- #### 3. **远程命令路径问题** **现象**: ```python bash: xxx: command not found ``` **原因**: 远程主机的`PATH`环境变量未包含所需命令路径[^3] **解决方案**: ```python # 显式指定命令绝对路径 stdin, stdout, stderr = client.exec_command(&#39;/usr/local/bin/custom_command&#39;) # 或临时设置PATH变量 full_cmd = &#39;export PATH=$PATH:/custom/path && your_command&#39; stdin, stdout, stderr = client.exec_command(full_cmd) ``` --- #### 4. **安装时报Rust编译错误** **现象**: ```python error: can&#39;t find Rust compiler ``` **原因**: Cryptography库需要Rust编译环境[^4] **解决方案**: ```bash # 升级pip并安装预编译包 python -m pip install --upgrade pip pip install paramiko --only-binary=:all: ``` --- #### 5. **协议不兼容错误** **现象**: ```python paramiko.ssh_exception.SSHException: Error reading SSH protocol banner ``` **原因**: 客户端与服务端SSH协议版本不匹配 **解决方案**: ```python # 强制指定协议版本 transport = client.get_transport() transport.default_window_size = 2147483647 # 调整窗口大小 transport.set_keepalive(30) # 启用心跳检测 ``` --- #### 6. **文件传输中断** **现象**: ```python paramiko.ssh_exception.SSHException: Channel closed ``` **原因**: 网络波动或大文件传输超时 **解决方案**: ```python # 使用SFTPClient调整传输参数 sftp = client.open_sftp() sftp.put(localpath, remotepath, confirm=True, callback=progress_bar) sftp.get_channel().settimeout(3600) # 设置1小时超时 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值