通过SFTP进行文件操作
SFTP使得用户终端可以在SSH协议的基础上与远端设备进行安全连接,增加数据传输的安全性。
配置流程
使用SFTP V1协议存在安全风险,建议使用SFTP V2方式进行文件操作。
通过SFTP进行文件操作的配置流程如表7-12所示。
缺省配置
参数 |
缺省值 |
---|---|
SFTP服务器功能 |
关闭 |
端口号 |
22 |
服务器密钥对更新时间 |
0,表示永不更新 |
SSH认证超时时间 |
60秒 |
SSH验证重试次数 |
3 |
SSH用户 |
没有创建 |
SSH用户的服务方式 |
空,即不支持任何服务方式 |
SSH用户的SFTP服务授权目录 |
空 |
操作步骤
- 配置SFTP服务器功能及参数表7-14 配置SFTP服务器功能及参数
操作步骤
命令
说明
进入系统视图
system-view
-
生成本地密钥对或分配PKI证书
方式一:
执行命令rsa local-key-pair create、dsa local-key-pair create或ecc local-key-pair create,生成本地RSA、DSA或ECC密钥对。
方式二:执行命令rsa key-pair label label-name [ modulus modulus-bits ]、dsa key-pair label label-name [ modulus modulus-bits ]或ecc key-pair label label-name [ modulus modulus-bits ],生成带标签的RSA、DSA或ECC密钥对。
- 执行命令ssh server assign { rsa-host-key | dsa-host-key | ecc-host-key | pki } label-name,为SSH服务器分配PKI证书、RSA主机密钥、RSA服务器密钥、DSA主机密钥或ECC主机密钥。
说明:方式二可以最多生成20对密钥对,用户可以在不同时期使用不同的密钥对,更好地确保了通信的安全性。设备最多可生成的密钥对数,可以通过rsa key-pair maximum、dsa key-pair maximum和ecc key-pair maximum命令配置。
用户也可以执行命令rsa key-pair label load private private-key public public-key或dsa key-pair label load private private-key public public-key,将本地RSA密钥对文件或DSA密钥对文件加载到服务器。
对于方式一:
密钥对生成后,可以执行display rsa local-key-pair public、display dsa local-key-pair public或display ecc local-key-pair public命令查看本地密钥对中RSA、DSA或ECC的公钥信息。
对于方式二:
密钥对生成后,可以执行display rsa key-pair [ brief | label label-name ]、display dsa key-pair [ brief | label label-name ]或display ecc key-pair [ brief | label label-name ]命令查看带标签的RSA、DSA或ECC密钥对信息。说明:密钥对长度越大,密钥对安全性就越好,建议使用最大的密钥对长度。
使能SSH服务器公钥算法
ssh server publickey { dsa | ecc | rsa | x509v3-ssh-rsa } *
缺省情况下,RSA公钥算法是开启的。
当使用公钥认证或者证书认证登录设备时,SSH服务器支持的公钥算法需要与命令ssh user authentication-type配置SSH用户的认证方式相同,否则用户无法登录设备。
说明:为了保证更好的安全性,建议不要使用长度小于2048位的RSA认证算法。
使能SFTP服务器功能
sftp [ ipv4 | ipv6 ] server enable
缺省情况下,SFTP服务为关闭状态。
配置SFTP服务器的默认授权目录
sftp server default-directory sftpdir
缺省情况下,SFTP服务器的默认授权目录为空。
用户可以使用以下三种方式配置SFTP服务器的默认授权目录:ssh user username sftp-directory directoryname配置指定用户的访问目录,优先级最高;其次是AAA视图下local-user user-name ftp-directory directory命令指定的FTP访问目录;sftp server default-directory sftpdir的优先级最低,且对所有SSH用户生效。
(可选)配置SSH服务器端的密钥交换算法列表
ssh server key-exchange { dh_group14_sha1 | dh_group1_sha1 | dh_group_exchange_sha1 | dh_group_exchange_sha256 | ecdh_sha2_nistp256 | ecdh_sha2_nistp384 | ecdh_sha2_nistp521 | sm2_kep } *
缺省情况下,SSH服务器使用dh_group_exchange_sha256密钥交换算法。
在客户端与服务器协商的过程中,二者对报文传输的密钥交换算法进行协商,服务器端根据客户端发来的密钥交换算法列表与自身的密钥交换算法列表进行对比,选择客户端与自己相匹配的第一个密钥交换算法作为报文传输的密钥交换算法,如果客户端的密钥交换算法列表与服务器端的密钥交换算法列表没有相匹配的算法,则协商失败。说明:当服务器上的公钥算法为ECC时,系统的首选交换算法必须是sm2_kep。
(可选)配置与SSH客户端进行Diffie-hellman-group-exchange密钥交换时支持的最小密钥长度。
ssh server dh-exchange min-len min-len
缺省情况下,SSH服务器与客户端进行Diffie-hellman-group-exchange密钥交换时,支持的最小密钥长度为2048bits。
(可选)配置SSH服务器端的加密算法列表
ssh server cipher { des_cbc | 3des_cbc | aes128_cbc | aes256_cbc | aes128_ctr | aes256_ctr | arcfour128 | arcfour256 | aes192_cbc | aes192_ctr | aes128_gcm | aes256_gcm | blowfish_cbc } *
缺省情况下,SSH服务器端使用AES256_GCM、AES128_GCM、AES256_CTR、AES192_CTR和AES128_CTR加密算法。
(可选)配置SSH服务器上的校验算法列表
ssh server hmac { md5 | md5_96 | sha1 | sha1_96 | sha2_256 | sha2_256_96 | sha2_512 } *
缺省情况下,SSH服务器端HMAC认证算法为SHA2_256和SHA2_512。
(可选)端口号
ssh [ ipv4 | ipv6 ] server port port-number
缺省情况下,SSH服务器的端口号是22。
如果配置了新的端口号,SSH服务器端先断开当前已经建立的所有SSH连接,然后使用新的端口号开始尝试连接。这样可以有效防止攻击者对SSH服务标准端口的访问,确保安全性。
(可选)服务器密钥对更新时间
ssh server rekey-interval hours
缺省情况下,SSH服务器密钥对的更新时间间隔为0,表示永不更新。
配置服务器密钥对更新时间,使得当SSH服务器的更新周期到达时,自动更新服务器密钥对,从而可以保证安全性。
(可选)SSH认证超时时间
ssh server timeout seconds
缺省情况下,SSH连接认证超时时间为60秒。
(可选)SSH验证重试次数
ssh server authentication-retries times
缺省情况下,SSH连接的验证重试次数为3。
(可选)使能兼容低版本功能
ssh server compatible-ssh1x enable
缺省情况下,SSH服务器兼容低版本功能处于未使能状态。
说明:如果SSH协议使能兼容低版本功能,系统会提示存在安全风险。
(可选)配置访问控制列表
ssh [ ipv6 ] server acl { acl-number | acl-name }
缺省情况下,没有配置访问控制列表。
配置了访问控制列表,可控制哪些客户端能以SSH方式访问本设备。
(可选)使能SSH服务器上的keepalive特性
undo ssh server keepalive disable
缺省情况下,SSH服务器上的keepalive特性处于使能状态。
SSH服务器在使能keepalive特性之后,若收到SSH客户端的keepalive报文之后,会进行响应。这样防止在无数据交互时断开与SSH客户端的连接,避免造成客户端重新连接服务器浪费服务器资源。
配置SSH服务器的源接口或源地址
执行命令ssh server-source -i interface-type interface-number
缺省情况下,未指定SSH服务端的源接口。
执行命令ssh server-source all-interface
缺省情况下,未指定SSH服务器的源接口。
执行命令ssh ipv6 server-source -a ipv6-address [ -vpn-instance vpn-instance-name ]
缺省情况下,未指定SSH服务端的IPv6源地址。
执行命令ssh ipv6 server-source all-interface
缺省情况下,未指定SSH服务器IPv6源接口。
成功指定SSH服务器的源接口后,系统只允许SSH用户通过指定的源接口登录服务器,通过其他接口登录的SSH用户都将被拒绝。
成功指定SSH服务器的源接口为设备上所有接口后,SSH用户可通过设备上配置了IPv4地址的物理接口、已创建并配置IPv4地址的逻辑接口登录。
说明:配置ssh server-source all-interface命令后,将不会指定SSH服务器的源接口,用户可从所有有效接口登录,增加系统安全风险,建议用户取消配置该命令。
成功指定SSH服务器的IPv6源地址后,系统只允许SFTP用户通过指定的源地址登录服务器,通过其他IPv6地址登录的SFTP用户都将被拒绝。
说明:配置ssh ipv6 server-source all-interface命令后,将不会指定SSH服务器的源IPv6接口,用户可从所有有效IPv6接口登录,增加系统安全风险,建议用户取消配置该命令。
(可选)配置SSH服务器最大客户端数
sftp max-sessions max-session-count
缺省情况下,SSH服务器最大客户端数是5。
如果设置的最大连接数小于当前登录设备的用户数,那么系统将拒绝新的连接请求,当前连接不会断开。
(可选)配置服务器和客户端之间断开连接的超时时间
sftp idle-timeout minutes [ seconds ]
缺省情况下,服务器和客户端之间断开连接的超时时间是10分钟。
执行命令sftp idle-timeout 0 0将关闭服务器和客户端之间超时断开连接功能。
提交配置
commit
-
- 生成本地RSA密钥对时,将同时生成两个密钥对:服务器密钥对和主机密钥对,二者分别包括一个公钥和一个私钥。服务器密钥对和主机密钥对的长度均为2048或者3072位。
- 生成本地DSA密钥对时,只生成一个主机密钥对,密钥对的长度为2048位。
- 生成本地ECC密钥对时,只生成一个主机密钥对,长度可为256、384、521位。缺省情况下,密钥对的长度为521位。
- 配置SSH用户配置SSH用户包括配置SSH用户的验证方式,设备支持的认证方式包括RSA、password、password-rsa、DSA、password-dsa、ECC、password-ecc、x509v3-rsa、password-x509v3-rsa和all。其中:
- password-rsa认证需要同时满足password认证和RSA认证。
- password-dsa认证需要同时满足password认证和DSA认证。
- password-ecc认证需要同时满足password认证和ECC认证。
- password-x509v3-rsa认证需要同时满足password认证和x509v3-rsa认证。
- all认证是指password认证、x509v3-rsa认证、RSA、DSA或ECC认证方式满足其中一种即可。
表7-15 配置SSH用户操作步骤
命令
说明
进入系统视图
system-view
-
创建SSH用户
ssh user user-name
-
配置SSH用户的认证方式
ssh user user-name authentication-type { password | rsa | password-rsa | all | dsa | password-dsa | ecc | password-ecc | x509v3-rsa | password-x509v3-rsa }
如果没有使用ssh user user-name命令配置相应的SSH用户,则可以直接执行ssh authentication-type default password命令为用户配置SSH认证缺省采用密码认证,在用户数量比较多时,对用户使用预设密码认证方式可以简化配置,此时只需再配置AAA用户即可。
配置SSH用户的服务方式为SFTP或all
ssh user user-name service-type { sftp | all }
缺省情况下,SSH用户的服务方式是空,即不支持任何服务方式。
配置SSH用户的SFTP服务授权目录
ssh user user-name sftp-directory directoryname
缺省情况下,SSH用户的SFTP服务授权目录是空。
提交配置
commit
-
- password认证依靠AAA实现,当用户使用password、password-rsa、password-dsa或password-ecc认证方式登录设备时,需要在AAA视图下创建同名的本地用户。
- 如果SSH用户使用password认证,则只需要在SSH服务器端生成本地RSA、DSA或ECC密钥。如果SSH用户使用RSA、DSA或ECC认证,则在服务器端和客户端都需要生成本地RSA、DSA或ECC密钥对,并且服务器端和客户端都需要将对方的公钥配置到本地。
根据上面配置的认证方式,进行选择配置:
若对SSH用户进行x509v3-rsa或password-x509v3-rsa认证,请根据表7进行配置。若进行password-x509v3-rsa认证,请同时配置表5和表7。
若对SSH用户进行password认证,请根据表7-16进行配置。
若对SSH用户进行RSA、DSA或ECC认证,请根据表7-17进行配置。
若对SSH用户进行password-rsa、password-dsa或password-ecc认证,则AAA用户和RSA、DSA或ECC公共密钥都需要进行配置,即同时配置表7-16和表7-17。
表7-16 配置对SSH用户进行password、password-x509v3-rsa、password-dsa、password-ecc或password-rsa认证操作步骤
命令
说明
进入系统视图
system-view
-
进入AAA视图
aaa
-
配置本地用户名和密码
local-user user-name password irreversible-cipher irreversible-cipher-password
-
配置本地用户的服务方式
local-user user-name service-type ssh
-
配置本地用户的级别
local-user user-name level level
必须将用户级别配置在管理员级别(3级或15级),否则FTP连接将无法成功。
退回到系统视图
quit
-
提交配置
commit
-
配置AAA用户时,必须将用户级别配置为3级及3级以上,否则连接不成功。
表7-17 配置对SSH用户进行dsa、ecc、rsa、password-dsa、password-ecc或password-rsa认证操作步骤
命令
说明
进入系统视图
system-view
-
配置SSH连接的认证类型
ssh authorization-type default root
缺省情况下,SSH连接的缺省类型为AAA。
当配置为AAA类型时,只允许配置为password认证方式;如果需要使用公钥认证方式,可以通过以下两种方式任意一种实现:- 执行此命令,配置为Root类型。
- 在AAA视图下,创建同名的本地用户。
进入RSA、DSA或ECC公共密钥视图
rsa peer-public-key key-name [ encoding-type { der | openssh | pem } ]
或
dsa peer-public-key key-name encoding-type { der | openssh | pem }
或
ecc peer-public-key key-name [ encoding-type der ]
-
进入公共密钥编辑视图
public-key-code begin
-
编辑公共密钥
hex-data
- 键入的公共密钥必须是按公钥格式编码的十六进制字符串,由支持SSH的客户端软件生成。具体操作参见相应的SSH客户端软件的帮助文档。
- 请将RSA、DSA或ECC公钥输入到作为SSH服务器的设备上。
退出公共密钥编辑视图
public-key-code end
- 如果未输入合法的密钥编码hex-data,执行本步骤后,将无法生成密钥。
- 如果指定的密钥key-name已经在别的窗口下被删除,再执行本步骤时,系统会提示:密钥已经不存在,此时直接退到系统视图。
退出公共密钥视图,回到系统视图
peer-public-key end
-
为SSH用户分配RSA、DSA或ECC公钥
ssh user user-name assign { rsa-key | dsa-key | ecc-key } key-name
-
提交配置
commit
-
- 用户通过SFTP协议访问设备
从终端通过SFTP访问设备,需要在终端上安装SSH客户端软件。此处以使用第三方软件OpenSSH和Windows命令行提示符为例进行配置。
OpenSSH软件的安装请参考该软件的安装说明。
使用OpenSSH软件从终端访问设备时,需要使用OpenSSH的命令,命令的使用可以参见该软件的帮助文档。
只有安装了OpenSSH软件后,Windows命令行提示符才能识别OpenSSH相关命令。
进入Windows的命令行提示符,执行OpenSSH命令,通过SFTP方式访问设备。
当出现SFTP客户端视图的命令行提示符,如sftp>,此时用户进入了SFTP服务器的工作目录。(以下显示信息仅为示意)
C:/Documents and Settings/Administrator> sftp client001@10.136.23.4 Connecting to 10.136.23.4... The authenticity of host "10.136.23.4 (10.136.23.4)" can't be established. DSA key fingerprint is 0d:48:82:fd:2f:52:1c:f0:c4:22:70:80:8f:7b:fd:78. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added "10.136.23.4" (DSA) to the list of known hosts. client001@10.136.23.4's password: sftp>
- 通过SFTP命令进行文件操作
用户可以通过两种方式通过SFTP命令进行文件操作:
- 当SFTP客户端登录到SSH服务器之后,用户可以在SFTP客户端进行如表7-19所示的操作。
以下各操作没有严格顺序,可根据需求选择一种或多种操作项目。
表7-19 通过SFTP文件操作命令进行文件操作操作项目
命令
说明
改变用户的当前工作目录
cd [ remote-directory ]
-
改变用户的工作目录为当前工作目录的上一级目录
cdup
-
显示用户的当前工作目录
pwd
-
显示指定目录下的文件列表
dir/ls [ -l | -a ] [ remote-directory ]
dir与ls执行的效果是一样的。
删除服务器上目录
rmdir remote-directory &<1-10>
一次最多可以删除十个目录。
使用该命令删除目录时,目录中不能有文件,否则会删除失败。
在服务器上创建新目录
mkdir remote-directory
-
改变服务器上指定的文件的名字
rename old-name new-name
-
下载远程服务器上的文件
get remote-filename [ local-filename ]
-
上传本地文件到远程服务器
put local-filename [ remote-filename ]
-
删除服务器上文件
remove remote-filename &<1-10>
一次最多可以删除十个文件。
remove与delete执行的效果是一样的。
SFTP客户端命令帮助
help [ command-name ]
-
- 设备作为SFTP服务器,在服务器上执行一键文件传输命令,从SFTP客户端上下载文件,或者上传文件至客户端。
表7-20 一键式命令进行文件操作
操作项目
命令
说明
基于IPv4建立SFTP连接
sftp client-transfile { get | put } [ -a source-address | -i interface-type interface-number ] host-ip host-ipv4 [ port ] [ [ public-net | -vpn-instance vpn-instance-name | prefer_kex prefer_kex | identity-key { rsa | dsa | ecc | pki } | prefer_ctos_cipher prefer_ctos_cipher | prefer_stoc_cipher prefer_stoc_cipher | prefer_ctos_hmac prefer_ctos_hmac | prefer_stoc_hmac prefer_stoc_hmac | -ki interval | -kc count ] ] * username user-name password password sourcefile source-file [ destination destination ]
通过IPv4方式连接SFTP服务器,并从服务器上下载文件至SFTP客户端或者从SFTP客户端上传文件至服务器。
基于IPv6建立SFTP连接
sftp client-transfile { get | put } ipv6 [ -a source-ipv6-address ] host-ip host-ipv6 [ -oi interface-type interface-number ] [ port ] [ [ public-net | -vpn-instance vpn-instance-name | prefer_kex prefer_kex | identity-key { rsa | dsa | ecc } | prefer_ctos_cipher prefer_ctos_cipher | prefer_stoc_cipher prefer_stoc_cipher | prefer_ctos_hmac prefer_ctos_hmac | prefer_stoc_hmac prefer_stoc_hmac | -ki interval | -kc count ] ] * username user-name password password sourcefile source-file [ destination destination ]
通过IPv6方式连接SFTP服务器,并从服务器上下载文件至SFTP客户端或者从SFTP客户端上传文件至服务器。
- 当SFTP客户端登录到SSH服务器之后,用户可以在SFTP客户端进行如表7-19所示的操作。
- 断开与SFTP服务器的连接
操作步骤
命令
说明
断开与SFTP服务器的连接
quit
也可执行bye或exit命令断开连接。