Akemi

Python paramiko模块案例—创建SSH、SFTP连接

2024/11/07

需要额外安装

pip3 install paramiko

SSH远程机器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#coding=utf-8
import paramiko

# 用SSHClient类实例化一个对象
ssh=paramiko.SSHClient()

# 配置ssh对象,自动填入ssh密钥,不安全
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 创建ssh连接
ssh.connect(hostname='192.168.10.102',username='root',password='1')

# 执行命令
stdin,stdout,stderr=ssh.exec_command('lsblk')
print("标准输出:\n",stdout.read().decode('utf-8'))

ssh.close()

SFTP传输文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import paramiko,os

ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

hostname='192.168.10.102'
username='root'
password='1'
# 设置本地与远端路径
local_dir='/usr/local/'
local_file='test.txt'
local_path=os.path.join(local_dir,local_file)
remote_path='/tmp/test.txt'

try:
# 创建本地目录
ssh.connect(hostname=hostname, username=username, password=password)
print('ssh连接成功')
# 创建sftp客户端
sftp=ssh.open_sftp()
# 判断源文件是否存在,没有的话创建(测试)
os.makedirs(local_dir, exist_ok=True)
print(f'已确保本地目录存在: {local_dir}')

# 如果需要,创建并写入文件
with open(local_path, 'w') as f:
f.write('这是测试文件的内容。')
print(f'已创建并写入本地文件: {local_path}')

# sftp上传
sftp.put(local_path,remote_path)
print(f"成功上传文件:{local_path}{hostname}:{remote_path}")

# sftp下载
# sftp.get(remote_path,local_path)

except Exception as e:
print(f"错误{e}")

finally:
sftp.close()
ssh.close()
# 成功关闭连接


# python paramiko_module.py
# ssh连接成功
# 已确保本地目录存在: /usr/local/
# 已创建并写入本地文件: /usr/local/test.txt
# 成功上传文件:/usr/local/test.txt到192.168.10.102:/tmp/test.txt
# 成功关闭连接
CATALOG