大家好!我是风哥,一个资深Python工程师。今天要给大家介绍一个在Python中操控远程服务器的神器——Paramiko!它是一个强大的SSH库,可以让你轻松地连接到远程服务器,执行命令,上传下载文件等等。想成为远程运维高手?那就快来学习Paramiko吧!
一、Paramiko简介
Paramiko是一个纯Python实现的SSHv2协议库,它提供了SSH客户端和服务端的功能。这意味着你不仅可以用它连接到远程服务器,还可以用它搭建自己的SSH服务器。它支持密码认证和密钥认证,安全性杠杠的!安装也很简单,直接pip搞定:pip install paramiko
注意事项: 在使用Paramiko之前,确保你的系统已经安装了OpenSSH或其他SSH服务。
二、如何安装
正如上面所说,安装Paramiko非常简单,只需在你的终端中运行以下命令:
1pip install paramiko
注意事项: 如果你使用的是虚拟环境,请确保在正确的虚拟环境中安装Paramiko。
三、基本用法
Paramiko提供了两个核心类:SSHClient 和 SFTPClient。
3.1 SSHClient
SSHClient 用于建立SSH连接并执行命令。
1import paramiko
2
3client = paramiko.SSHClient()
4client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加主机密钥,避免第一次连接时的警告
5client.connect(hostname="your_server_ip", username="your_username", password="your_password")
6
7stdin, stdout, stderr = client.exec_command("ls -l")
8print(stdout.read().decode())
9
10client.close()
注意事项: 将 your_server_ip、your_username 和 your_password 替换成你自己的服务器信息。AutoAddPolicy() 不推荐在生产环境中使用,最好使用已知的host_keys。
3.2 SFTPClient
SFTPClient 用于进行文件传输。
1import paramiko
2
3transport = paramiko.Transport(("your_server_ip", 22))
4transport.connect(username="your_username", password="your_password")
5
6sftp = paramiko.SFTPClient.from_transport(transport)
7sftp.put("local_file.txt", "remote_file.txt") # 上传文件
8sftp.get("remote_file.txt", "local_file.txt") # 下载文件
9
10sftp.close()
11transport.close()
注意事项: 确保本地文件和远程路径存在。
四、高级用法
4.1 使用密钥认证
密钥认证比密码认证更加安全。
1import paramiko
2
3key = paramiko.RSAKey.from_private_key_file("your_private_key_path")
4client = paramiko.SSHClient()
5client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
6client.connect(hostname="your_server_ip", username="your_username", pkey=key)
7
8# ... 执行命令或文件传输 ...
9
10client.close()
注意事项: 将 your_private_key_path 替换成你的私钥文件路径。
4.2 执行交互式命令
对于需要交互的命令,可以使用invoke_shell()方法。
1import paramiko
2
3client = paramiko.SSHClient()
4client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
5client.connect(hostname="your_server_ip", username="your_username", password="your_password")
6
7channel = client.invoke_shell()
8channel.send("sudo su\n")
9channel.send("your_sudo_password\n") # 如果需要sudo权限
10channel.send("some_interactive_command\n")
11
12# ... 处理交互 ...
13
14client.close()
注意事项: 交互式命令的处理比较复杂,需要根据具体的命令进行调整。
五、实际使用案例
使用Paramiko批量管理服务器,例如批量执行命令、分发文件等。
六、总结
今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问风哥哦。祝大家学习愉快,收获满满!