插件窝 干货文章 怎么通过Python实现linux远程登陆及sftp

怎么通过Python实现linux远程登陆及sftp

Paramiko 密钥 SFTP 使用 100    来源:    2025-04-27

通过Python实现Linux远程登录及SFTP传输

Python可以通过多种方式实现Linux远程登录和SFTP文件传输。以下是几种常用的方法:

1. 使用Paramiko库

Paramiko是Python实现SSHv2协议的库,可以用于远程命令执行和SFTP传输。

安装Paramiko

pip install paramiko

示例代码

import paramiko

# 远程主机信息
hostname = 'your_server_ip'
port = 22  # 默认SSH端口
username = 'your_username'
password = 'your_password'  # 或使用密钥认证

# 创建SSH客户端
ssh_client = paramiko.SSHClient()

# 自动添加主机密钥(生产环境应考虑更安全的方式)
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    # 连接服务器
    ssh_client.connect(hostname, port, username, password)

    print("SSH连接成功")

    # 执行远程命令
    stdin, stdout, stderr = ssh_client.exec_command('ls -l')
    print(stdout.read().decode())

    # 创建SFTP客户端
    sftp = ssh_client.open_sftp()

    # 上传文件
    local_path = 'local_file.txt'
    remote_path = 'remote_file.txt'
    sftp.put(local_path, remote_path)

    # 下载文件
    sftp.get(remote_path, 'downloaded_file.txt')

    # 关闭SFTP
    sftp.close()

except Exception as e:
    print(f"发生错误: {e}")
finally:
    # 关闭SSH连接
    ssh_client.close()

2. 使用Fabric库

Fabric是一个更高级的库,建立在Paramiko之上,简化了远程操作。

安装Fabric

pip install fabric

示例代码

from fabric import Connection

# 连接信息
host = 'your_server_ip'
user = 'your_username'
password = 'your_password'  # 或使用密钥

# 创建连接
c = Connection(host=host, user=user, connect_kwargs={'password': password})

# 执行远程命令
result = c.run('uname -a', hide=True)
print(f"命令输出: {result.stdout}")

# 文件传输
c.put('local_file.txt', 'remote_file.txt')  # 上传
c.get('remote_file.txt', 'downloaded_file.txt')  # 下载

3. 使用SFTPClient类

如果只需要SFTP功能,可以专门使用SFTPClient:

import paramiko

transport = paramiko.Transport(('hostname', 22))
transport.connect(username='username', password='password')

sftp = paramiko.SFTPClient.from_transport(transport)

# 上传文件
sftp.put('local_path', 'remote_path')

# 下载文件
sftp.get('remote_path', 'local_path')

sftp.close()
transport.close()

安全注意事项

  1. 避免硬编码密码:考虑使用密钥认证或环境变量存储敏感信息
  2. 主机密钥验证:生产环境不应使用AutoAddPolicy,应验证主机密钥
  3. 异常处理:确保连接在异常情况下也能正确关闭
  4. 使用上下文管理器:确保资源正确释放

密钥认证示例

import paramiko

# 使用私钥文件连接
private_key = paramiko.RSAKey.from_private_key_file('/path/to/private_key')

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='hostname', username='username', pkey=private_key)

# ...执行操作...

ssh.close()

以上方法可以根据具体需求选择使用,Paramiko提供了最基础的功能,Fabric则提供了更高级的抽象。