Python可以通过多种方式实现Linux远程登录和SFTP文件传输。以下是几种常用的方法:
Paramiko是Python实现SSHv2协议的库,可以用于远程命令执行和SFTP传输。
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()
Fabric是一个更高级的库,建立在Paramiko之上,简化了远程操作。
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') # 下载
如果只需要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()
AutoAddPolicy
,应验证主机密钥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则提供了更高级的抽象。