赞
踩
本文Python Code基于chatGPT的推荐,并修改调试实际运行通过,供学习参考。
Paramiko官方网站:Welcome to Paramiko! — Paramiko documentation
Paramiko GitHub页面:GitHub - paramiko/paramiko: The leading native Python SSHv2 protocol library.
Paramiko是一个用Python语言编写的实现SSH协议的库,可以轻松实现SSH和SFTP连接,从而进行SSH协议操作和SFTP文件传输。其中,SSH协议是基于TCP协议进行加密传输的远程登录协议,SFTP协议则是基于SSH协议进行加密传输的文件传输协议。
Paramiko不需要使用外部库或依赖,可以直接在Python程序中使用,并且提供了简洁的API,方便快捷地创建SSH和SFTP连接、在远程服务器中执行命令和文件上传下载等。此外,Paramiko还支持多并发连接、客户端日志记录、键验证等高级功能。
Paramiko广泛用于各种目的,包括自动化系统管理员任务、远程基础架构管理以及网络协议脚本测试等。它也是Python开发者在需要与使用SSH或SFTP协议的其他服务进行集成时的选择。
Paramiko 的主要特点包括:
- 支持SSHv2、SFTP和SCP协议。
- 高级加密算法实现安全通信。
- 用于处理SSH和SFTP连接的简单直观API。
- 支持于密钥和密码的身份验证。
- 多线程和异步支持。
- 内置支持SSH agent forwarding和X11 forwarding。
总的来说,如果你需要使用Python来自动化远程系统管理任务或管理远程基础架构,Paramiko是一个很好的选择。它可以轻松地创建安全的SSH和SFTP连接,并提供灵活的高级API,非常适合于许多不同的用例。
首先确保已经安装了paramiko,全新安装
$ pip install paramiko
Paramiko库提供了一组灵活的API,可以轻松实现SSH和SFTP连接和交互。下面是一些常用的API:
这个API可以创建一个SSH连接并进行身份验证。在这个例子中,我们使用set_missing_host_key_policy()方法来自动添加连接的主机密钥,使用connect()方法来连接到想要连接的主机。
- import paramiko
-
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect('hostname', username='username', password='password')
这个API可以创建一个SFTP连接并传输文件。在这个例子中,我们使用Transport()方法在指定的端口上创建传输对象,并使用connect()方法来连接到想要连接的主机。然后使用SFTPClient.from_transport()方法创建SFTP客户端,使用put()方法传送文件,最后关闭连接。
- import paramiko
-
- transport = paramiko.Transport(('hostname', 22))
- transport.connect(username='username', password='password')
- sftp = paramiko.SFTPClient.from_transport(transport)
- sftp.put('/local/filename', '/remote/filename')
- sftp.close()
- transport.close()
这个API可以在远程计算机上执行命令并获取输出。在这个例子中,我们使用SSHClient()方法创建SSH连接并进行身份验证。然后,使用exec_command()方法通过SSH连接在远程计算机上执行命令,并使用read()方法获取输出。最后,关闭连接。
- import paramiko
-
- 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('ls -l')
- print(stdout.read().decode())
- ssh.close()
总的来说,Paramiko API是简单但非常灵活的,可以方便地实现SSH和SFTP连接和远程操作,在处理系统管理、远程基础架构管理和网络协议脚本测试等方面提供很好的帮助。
- import paramiko
-
- def download_file(hostname, username, password, remote_path, local_path):
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect(hostname=hostname, username=username, password=password)
- sftp = ssh.open_sftp()
- sftp.get(remote_path, local_path)
- sftp.close()
- ssh.close()
-
- def upload_file(hostname, username, password, remote_path, local_path):
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect(hostname=hostname, username=username, password=password)
- sftp = ssh.open_sftp()
- sftp.put(local_path, remote_path)
- sftp.close()
- ssh.close()
-
- if __name__ == "__main__":
- hostname = "server_IP"
- username = "server_username"
- password = "server_password"
- remote_path = "~/download.file"
- local_path = "./download.file"
- remote_path_upload = "~/upload.file"
- local_path_upload = "./upload.file"
-
- # 下载文件
- download_file(hostname, username, password, remote_path, local_path)
- # 上传文件
- upload_file(hostname, username, password, remote_path_upload, local_path_upload)
抓包可以看出TCP三次握手,并且使用SSHv2 paramiko进行连接,然后交换密钥key,最后实现文件的加密传输。在客户端(IP .56)执行python代码,从服务器端(IP .86)下载源文件到客户端目标路径。
根据实测,每次下载的文件分片大小为32768bytes,和paramiko(SSHv2/SFTP)定义一致。
RFC 4253 - The Secure Shell (SSH) Transport Layer Protocol
6.1. Maximum Packet Length All implementations MUST be able to process packets with an uncompressed payload length of 32768 bytes or less and a total packet size of 35000 bytes or less (including 'packet_length', 'padding_length', 'payload', 'random padding', and 'mac'). The maximum of 35000 bytes is an arbitrarily chosen value that is larger than the uncompressed length noted above. Implementations SHOULD support longer packets, where they might be needed. For example, if an implementation wants to send a very large number of certificates, the larger packets MAY be sent if the identification string indicates that the other party is able to process them. However, implementations SHOULD check that the packet length is reasonable in order for the implementation to avoid denial of service and/or buffer overflow attacks.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。