HuaWei_Paramiko_Sftp

发布时间 2023-03-23 14:25:07作者: 张贺贺呀

前言

Sftp是建立在ssh的基础上的,所以现在像xshell、crt、mobaxterm都是在原有的软件包上集成了sftp,我们只需要通过快捷键或按钮调用即可。那我们在写代码的时候,也可以很容易地在ssh的通道的基础上附加xftp,实现文件的上传和下载。

我们在华为考试时,考验的知识点其实非常简单,就是关于VRP系统配置文件的上传和下载,由于我们前面已经通过Paramiko的sftp功能实现了在linux上文件的上传和下载,所以在这里面讲的时候会直接把前面的代码直接拿过来修改一下,不再进行详细的解释,毕竟原理是一样的,甚至说比LINUX上的SFTP还要简单许多。

关于paramiko_ssh的请参考此博客内容

有几个点需要注意一下:

  1. 在使用sftp的时候由于是建立在ssh的通道基础上,所以依然要“斩断”ssh程序与文件系统之间的关系。
  2. 默认华为服务器并没有启动sftp的功能,所以我们要先打开一下,打开的命令是sftp server enable。
  3. 默认华为的配置文件大小为零,这是因为将当前的配置从内存刷到硬盘当中,所以要先save一下;
  4. 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)