您的位置:首页 > 运维架构

OpenSSH中SFTP协议实现相关程序

2015-08-23 21:42 351 查看
一、OpenSSH中SFTP协议实现相关程序

OpenSSH中SFTP协议实现的相关程序有:sftp和sftp-server[2]。

sftp程序实现SFTP协议中的SFTP-Client,sftp-server实现SFTP协议中的SFTP-Server

备注:

sftp程序路径为:/usr/bin/sftp

sftp-server程序路径为:/usr/lib/openssh/sftp-server

二、工作原理

1、sftp-server是被触发运行

sftp-server跟常见的Server不太一样,不是“持续运行,监听端口”的,而是被触发运行的(比如Mysql Server“持续运行,监听3306端口”)。具体是由SSH Server(在OpenSSH中是sshd程序)触发的。

其实可以在sshd程序使用的sshd_config文件中配置需要触发运行的“SFTP协议中SFTP-Server的具体实现程序”,默认配置的就是sftp-server这个实现程序,可以改成使用internal-sftp。[3]

当sshd程序刚开始运行的时候并不需要加载sftp-server这个程序,只有在向sshd程序发送sftp请求的时候才会去加载运行sftp-server程序,这个论述可以通过以下实验证明:

1)直接加载运行sshd程序,不会产生sftp-server进程,然后向sshd发送sftp请求,发现产生了sftp-server进程

2)如果首先将"/usr/lib/openssh/sftp-server"移除,然后重新加载运行sshd程序,发现不会产生任何错误,能够正常工作,也没有产生sftp-server进程,然后向sshd发送sftp请求,发现会出现如图1错误:

图1



2、安全数据通道

在sftp和sftp-server的程序实现中,安全的数据通道由SSH连接提供。

3、整个SFTP连接示意图

整个过程的示意图如图2所示:

图2



三、用法介绍

3.1、sftp-server程序

由sshd负责调用,一般不需要特殊配置

3.2、sftp程序

我们主要来介绍sftp程序的使用用法。

sftp是一个具有交互运行模式的命令,主要工作都可在交互运行模式中进行。

1、进入交互运行模式

sftp -i identify_file -P port user@remoteHost
-i:选项值被直接传递给底层调用的ssh程序,作为ssh程序中"-i"选项的值

-P:选项值被直接传递给底层调用的ssh程序,作为ssh程序中"-p"选项的值

user:选项值被直接传递给底层调用的ssh程序,作为ssh程序中"-l"选项的值

remoteHost:被直接传递给底层调用的ssh程序,等价于ssh程序中"hostname"

以上这些选项都可在ssh_config文件中配置,以"~/.ssh/config"文件为例,其中增加如下配置内容后,命令可简化为:

sftp RemoteHostAlias


Host RemoteHostAlias #指定配置匹配条件
HostName remoteHost
User user
Port port
IdentityFile identify_file


备注:

另外还有两个比较有用的选项

-D sftp-server-path:表示不是由sshd进程打开sftp-server,而是直接根据sftp-server-path路径打开sftp-server。

这样子得到的sftp-server进程的父进程是执行命令的bash进程;如果是由sshd进程打开sftp-server,那么得到的sftp-server进程的父进程是sshd进程

-v:表示打印日志信息,这有助于我们进行调试,解决遇到的问题。"-v"选项越多,表示打印的日志信息越详细。

2、交互模式中的命令

进入交互模式中,可以运行一些文件管理命令,这些文件管理命令由sftp进程进行解析运行。(sftp交互模式中的这些文件管理命令跟通常的文件管理命令,比如sftp交互模式中的cd命令和通常的cd命令,功能相近,因而为了减少学习成本,sftp交互模式中的这些文件管理命令跟相对应的通常的文件管理命令“名称相近,用法相似”)

这些文件管理命令可以分为3个类别:

2.1、针对远端主机来说

cd
chgrp grp path[grp是数字形式]
chmod mode path
chown own path[own是数字形式]
ln
ls
mkdir
pwd
rename
rm
rmdir

2.2、针对本地机器来说

lcd
lls(支持的选项跟通常的ls命令一样)
lmkdir
lpwd


2.3、其他

get -r:从远端主机复制文件到本地,加了r选项表示允许递归复制目录,不会解析遇到的软符号链接
progress:切换是否显示进度条
put -r:从本地复制文件到远端主机,加了r选项表示允许递归复制目录,不会解析遇到的软符号链接
exit:退出


参考文献:

[1]man sftp

[2]man 8 sftp-server

[3]man 5 sshd_config
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: