借助Paramiko通过Python实现linux远程登陆及sftp的操作
Paramiko 是一个强大的 Python 库,它允许程序员利用 SSH2 协议进行安全的远程通信。在 Linux 系统中,远程登录和文件传输通常通过 SSH(Secure Shell)和 SFTP(Secure File Transfer Protocol)来完成。Paramiko 提供了接口,让我们能够方便地在 Python 脚本中实现这些功能。 1. **SSH 远程登录**: - Paramiko 提供了 `SSHClient` 类,用于与远程主机建立 SSH 连接。你需要创建一个 `SSHClient` 实例,然后设置策略以允许连接到未在 `known_hosts` 文件中记录的主机。接着,通过调用 `connect()` 方法,提供主机地址、用户名、端口号(通常是 22)以及密码来建立连接。一旦连接建立,你可以使用 `exec_command()` 方法执行远程主机上的命令,获取输出并关闭连接。 - 示例代码: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect("xx.xx.xx.xx", username="root", port=22, password="you_password") ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l") print(ssh_stdout.read().decode()) ssh.close() ``` 2. **复用 SSH 连接**: - 如果你需要在同一个连接上执行多个命令,可以使用 `Transport` 类来创建一个低级别的连接,然后创建一个 `SSHClient` 实例并将其 `_transport` 属性设置为 `Transport` 实例。这样就可以复用同一个 SSH 连接。 - 示例代码: ```python import paramiko trans = paramiko.Transport(("xx.xx.xx.xx", 22)) trans.connect(username="root", password="you_passwd") ssh = paramiko.SSHClient() ssh._transport = trans ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l") print(ssh_stdout.read().decode()) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("another_command") print(ssh_stdout.read().decode()) trans.close() ``` 3. **SFTP 文件传输**: - Paramiko 的 `SFTPClient` 类提供了 SFTP 功能。你可以使用 `invoke_shell()` 或 `exec_command()` 方法打开一个命令 shell 或执行单个命令,然后通过 `sftp` 属性访问 `SFTPClient` 对象进行文件操作,如上传、下载、列出目录等。 - 示例代码: ```python sftp = ssh.open_sftp() sftp.put("local_file.txt", "/remote/path/local_file.txt") remote_files = sftp.listdir("/") for file in remote_files: print(f"Remote file: {file}") sftp.close() ``` 4. **基于公钥的身份验证**: - 除了使用密码,Paramiko 也支持使用 RSA 或 DSA 私钥进行身份验证。你需要加载本地的私钥文件,并在连接时提供。如果私钥有密码保护,还需要提供 `passphrase` 参数。 - 示例代码(使用 RSA 私钥): ```python from paramiko import SSHClient, AutoAddPolicy, RSAKey key = RSAKey.from_private_key_file("path/to/private/key") ssh = SSHClient() ssh.set_missing_host_key_policy(AutoAddPolicy()) ssh.connect("xx.xx.xx.xx", username="root", pkey=key) # ... ssh.close() ``` 5. **其他注意事项**: - 在生产环境中,避免明文存储密码,最好使用密钥对进行身份验证。 - Paramiko 还支持代理跳转、公钥认证代理等高级功能。 - 记得在完成所有操作后关闭 SSH 和 SFTP 连接,以释放资源。 Paramiko 是一个强大且灵活的工具,它使得在 Python 中进行 SSH 和 SFTP 操作变得简单而安全。通过理解和掌握 Paramiko 的使用,你可以轻松地编写自动化脚本,实现远程服务器管理和文件传输任务。
- 粉丝: 303
- 资源: 935
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助