HuaWei_Paramiko_Sftp
前言
Sftp是建立在ssh的基础上的,所以现在像xshell、crt、mobaxterm都是在原有的软件包上集成了sftp,我们只需要通过快捷键或按钮调用即可。那我们在写代码的时候,也可以很容易地在ssh的通道的基础上附加xftp,实现文件的上传和下载。
我们在华为考试时,考验的知识点其实非常简单,就是关于VRP系统配置文件的上传和下载,由于我们前面已经通过Paramiko的sftp功能实现了在linux上文件的上传和下载,所以在这里面讲的时候会直接把前面的代码直接拿过来修改一下,不再进行详细的解释,毕竟原理是一样的,甚至说比LINUX上的SFTP还要简单许多。
有几个点需要注意一下:
- 在使用sftp的时候由于是建立在ssh的通道基础上,所以依然要“斩断”ssh程序与文件系统之间的关系。
- 默认华为服务器并没有启动sftp的功能,所以我们要先打开一下,打开的命令是sftp server enable。
- 默认华为的配置文件大小为零,这是因为将当前的配置从内存刷到硬盘当中,所以要先save一下;
- ce12800默认第一次登录时还要修改密码,所以,第一次登录的时候先手动登录一下;
所以说:总体的命令行的预配置如下所示:
# SSH的预先配置
system-view immediately
telnet server disable
stelnet server enable
user-interface vty 0 4
authentication-mode aaa
quit
aaa
local-user zhangsan password cipher Passworda1!aaa
local-user zhangsan level 3
local-user zhangsan service-type ssh
int GE 1/0/1
undo portswitch
undo shutdown
ip add 192.168.80.101 24
# SFTP预先配置,注意一点,不要忘记给用户设置根目录
sftp server enable
aaa
local-user zhangsan ftp-directory cfcard:/
save
# 验证
## 注意观察Size那一栏,不能是0,否则不能下载
<HUAWEI>dir | incl vrpcfg
Idx Attr Size(Byte) Date Time FileName
8 -rw- 1,510 Mar 23 2023 11:04:44 vrpcfg.cfg
## 注意,ssh端口要侦听才可以
<HUAWEI>dis tcp status -
0x8093271F 3 0.0.0.0:22 0.0.0.0:0 LISTEN -
下载
# 下载
import os.path
import paramiko
def sftp_get(file_path):
port_number = 22
username = "zhangsan"
password = "Passworda1!aaa"
ip = "192.168.80.101"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
port=port_number,
username=username,
password=password,
hostname=ip
)
# 在ssh的基础上附加或打开sftp
sftp = ssh.open_sftp()
file_in = file_path
file_out = os.path.basename(file_in)
sftp.get(file_in, file_out)
ssh.close()
files = ["vrpcfg.cfg"]
for file in files:
sftp_get(file)
上传
# 上传
import os.path
import paramiko
def sftp_put(put_file):
port_number = 22
username = "zhangsan"
password = "Passworda1!aaa"
ip = "192.168.80.101"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
port=port_number,
username=username,
password=password,
hostname=ip
)
# 在ssh的基础上附加或打开sftp
sftp = ssh.open_sftp()
file_in = put_file
file_out = f'{file_in}.back'
sftp.put(file_in,file_out)
ssh.close()
files = ["vrpcfg.cfg"]
for file in files:
sftp_put(file)