Python使用Paramiko实现SSH的功能详解
什么是Paramiko
Paramiko是Python下的SSH客户端库,通过Paramiko可以实现远程服务器的连接和操作,包括执行命令、上传下载文件等。使用Paramiko需要安装paramiko
库和pycrypto
库。
Paramiko的基本用法
连接SSH服务器
使用Paramiko连接SSH服务器的方法是创建SSHClient对象,然后调用connect
方法连接远程服务器。连接时需要指定服务器的IP地址、用户名和密码。
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='root', password='123456')
其中set_missing_host_key_policy
方法是设置当遇到新的SSH服务器时(即第一次连接某个服务器),Paramiko应该采取的策略。AutoAddPolicy会自动添加任何新的SSH服务器,但不会验证SSH服务器是否真的可信。开发者也可以根据需要定义自己的策略。
执行远程命令
Paramiko连接SSH服务器后,就可以通过exec_command
方法执行远程命令。该方法返回三个文件对象,分别对应命令的标准输入、标准输出和标准错误输出。在执行命令时,需要注意一些细节问题:
- 完整的命令需要在连接的远程服务器上可用,可以在SSH客户端上登录远程服务器,手动执行一下命令,确保命令能够正确执行。
- 在执行命令时,需要等待命令执行完毕,才能够读取标准输出和标准错误输出,否则可能会得到不完整的输出结果。
stdin, stdout, stderr = ssh.exec_command('ls /')
print(stdout.read().decode())
print(stderr.read().decode())
上传和下载文件
Paramiko还可以实现上传和下载文件的操作。其原理是利用SFTP协议在本地机器和远程服务器之间传输文件。
# 文件上传
sftp = ssh.open_sftp()
sftp.put('localfile.txt', 'remotefile.txt')
# 文件下载
sftp.get('remotefile.txt', 'localfile.txt')
在上传和下载文件时,需要注意以下内容:
- 文件的本地路径和远程路径都需要是绝对路径。
- 文件上传和下载都是阻塞操作,需要等待操作完成才能继续进行下一步操作。
Paramiko的高级用法
在使用Paramiko进行SSH操作时,可能还会涉及到一些高级的操作,例如使用SSH密钥进行连接、支持多个SSH会话等。这里就不再展开讲解,感兴趣的读者可以继续深入学习。
示例
示例1:检查远程主机的CPU和内存使用情况
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='root', password='123456')
stdin, stdout, stderr = ssh.exec_command('top -bn1 | grep "Cpu(s)" && top -bn1 | grep "MiB Mem"')
print(stdout.read().decode())
print(stderr.read().decode())
ssh.close()
示例2:上传本地文件到远程服务器
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='root', password='123456')
sftp = ssh.open_sftp()
sftp.put('localfile.txt', 'remotefile.txt')
ssh.close()
这两个示例演示了如何使用Paramiko连接SSH服务器并执行命令、上传下载文件的操作。开发者可以根据自己的需要进行修改和扩展。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python使用paramiko实现ssh的功能详解 - Python技术站