ssh_sftp
ssh_sftp
模块
ssh_sftp
模块摘要
SFTP客户端
描述
该模块实现SSH FTP(SFTP)客户端。SFTP是一种可用于SSH的安全,加密文件传输服务。
数据类型
在本模块中多次使用的类型定义,或用于指示数据类型的预期用途的抽象,或者两者都使用:
reason()
=atom()
对操作失败原因的描述。
该值由draft-ietf-secsh-filexfer-13.txt
9.1节中定义的协议级响应中的sftp错误代码形成。
这些代码被命名为SSH_FX_*
被转换成星部的小写。例如错误代码SSH_FX_NO_SUCH_FILE
将导致reason()
成为no_such_file
...
ssh_connection_ref() =
opaque()
- 由 ssh:connect/3
返回
timeout()
=infinity | integer()
以毫秒为单位。默认无穷大
暂停
如果该请求用于SFTP通道返回{error, timeout}
,则在预期的时间内未收到来自服务器的应答。
请求可能已到达服务器并已执行。但是,没有在预期时间内从服务器收到任何答复。
输出
apread(ChannelPid, Handle, Position, Len) -> {async, N} | {error, reason()}
类型
该apread/4
函数从指定位置读取,组合函数position/3
和aread/3
函数。
apwrite(ChannelPid, Handle, Position, Data) -> {async, N} | {error, reason()}
类型
该apwrite/4
函数写入指定位置,组合函数position/3
和awrite/3
函数。
aread(ChannelPid, Handle, Len) -> {async, N} | {error, reason()}
类型
从一个打开的文件中读取,无需等待结果。 如果句柄有效,函数返回{async,N},其中N是在aread调用之间保证唯一的一个术语。 实际数据作为消息发送给调用进程。 此消息的格式为{async_reply,N,Result},其中Result是读取的结果,即{ok,Data},eof或{error,reason()}。
awrite(ChannelPid, Handle, Data) -> {async, N} | {error, reason()}
类型
写入一个打开的文件,无需等待结果。 如果句柄有效,则函数返回{async,N},其中N是保证在awrite调用之间唯一的项。 写入操作的结果作为消息发送给调用进程。 此消息的格式为{async_reply,N,Result},其中Result是写入的结果,或者是ok,或者是{error,reason()}。
close(ChannelPid, Handle) ->close(ChannelPid, Handle, Timeout) -> ok | {error, reason()}
类型
关闭服务器上打开的文件或目录的句柄。
delete(ChannelPid, Name) ->delete(ChannelPid, Name, Timeout) -> ok | {error, reason()}
类型
删除指定的文件Name
。
del_dir(ChannelPid, Name) ->del_dir(ChannelPid, Name, Timeout) -> ok | {error, reason()}
类型
删除指定的目录Name
。在成功删除之前,该目录必须是空的。
list_dir(ChannelPid, Path) ->list_dir(ChannelPid, Path, Timeout) -> {ok, Filenames} | {error, reason()}
类型
列出服务器上的给定目录,将文件名作为字符串列表返回。
make_dir(ChannelPid, Name) ->make_dir(ChannelPid, Name, Timeout) -> ok | {error, reason()}
类型
创建由指定的目录Name
。Name
必须是新目录的完整路径。该目录只能在现有目录中创建。
make_symlink(ChannelPid, Name, Target) ->make_symlink(ChannelPid, Name, Target, Timeout) -> ok | {error, reason()}
类型
创建指向Target
名字Name
...
open(ChannelPid, File, Mode) ->open(ChannelPid, File, Mode, Timeout) -> {ok, Handle} | {error, reason()}
类型
在服务器上打开一个文件并返回一个句柄,该句柄可用于读写。
opendir(ChannelPid, Path) ->opendir(ChannelPid, Path, Timeout) -> {ok, Handle} | {error, reason()}
类型
打开服务器上某个目录的句柄。句柄可用于读取目录内容。
open_tar(ChannelPid, Path, Mode) ->open_tar(ChannelPid, Path, Mode, Timeout) -> {ok, Handle} | {error, reason()}
类型
打开服务器上关联的tar文件的句柄ChannelPid
。按照该erl_tar:init/3
功能的定义,手柄可用于远程焦油的创建和提取。
有关代码示例,请参阅SFTP Client with TAR Compression and Encryption
ssh用户指南中的部分。
将crypto
模式选项应用于生成的字节流,然后将它们发送到SFTP服务器。这是用于加密,但可用于其他目的。
在InitFun
被施加一次之前的任何其他crypto
操作。CryptoState
然后将返回的信息折叠为EncryptFun
or的重复应用DecryptFun
。从这些funs返回的二进制文件被进一步发送到远程SFTP服务器。最后,如果进行加密,CloseFun
则应用于最后一条数据。该CloseFun
负责填充(如果需要)并加密该最后一块。
ChunkSize
限定的尺寸PlainBin
,且s EncodeFun
施加到。如果ChunkSize
是undefined
,则PlainBin
s 的大小会有所不同,因为这是用于流加密,而固定ChunkSize
用于块加密。ChunkSize
s可以在从EncryptFun
or 返回时改变DecryptFun
。该值可以在pos_integer()
和之间改变undefined
。
position(ChannelPid, Handle, Location) ->position(ChannelPid, Handle, Location, Timeout) -> {ok, NewPosition | {error, reason()}
类型
设置引用的文件的文件位置Handle
。{ok, NewPosition}
如果成功则返回(作为绝对偏移量),否则返回{error, reason()}
。Location
是以下之一:
Offset
同{bof, Offset}
...
{bof, Offset}
绝对偏移
{cur, Offset}
与当前职位相抵。
{eof, Offset}
从文件末尾偏移。
bof | cur | eof
与Offset
0 相同,即{bof, 0} | {cur, 0} | {eof, 0}
。
pread(ChannelPid, Handle, Position, Len) ->pread(ChannelPid, Handle, Position, Len, Timeout) -> {ok, Data} | eof | {error, reason()}
类型
该pread/3,4
函数从指定位置读取,组合函数position/3
和read/3,4
函数。
pwrite(ChannelPid, Handle, Position, Data) -> okpwrite(ChannelPid, Handle, Position, Data, Timeout) -> ok | {error, reason()}
类型
该pwrite/3,4
函数写入指定位置,组合函数position/3
和write/3,4
函数。
read(ChannelPid, Handle, Len) ->read(ChannelPid, Handle, Len, Timeout) -> {ok, Data} | eof | {error, reason()}
类型
Len
从引用的文件中读取字节Handle
。返回{ok, Data}
,eof
或{error, reason()}
。如果打开文件binary
,Data
是一个二进制文件,否则它是一个字符串。
如果文件被读取过去eof
,只有剩余的字节被读取并返回。如果没有读取字节,eof
则被返回。
read_file(ChannelPid, File) ->read_file(ChannelPid, File, Timeout) -> {ok, Data} | {error, reason()}
类型
从服务器读取文件,并以二进制形式返回数据。
read_file_info(ChannelPid, Name) ->read_file_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, reason()}
类型
返回file_info
指定的文件记录。Name
或Handle
.见file:read_file_info/2
有关记录的信息。
read_link(ChannelPid, Name) ->read_link(ChannelPid, Name, Timeout) -> {ok, Target} | {error, reason()}
类型
从指定的符号链接读取链接目标name
。
read_link_info(ChannelPid, Name) -> {ok, FileInfo} | {error, reason()}read_link_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, reason()}
类型
file_info
从Name
or 指定的符号链接返回记录Handle
。查看file:read_link_info/2
有关记录的信息。
rename(ChannelPid, OldName, NewName) ->rename(ChannelPid, OldName, NewName, Timeout) -> ok | {error, reason()}
类型
重命名一个名为的文件OldName
并为其命名NewName
。
start_channel(ConnectionRef) ->start_channel(ConnectionRef, Options) -> {ok, Pid} | {error, reason()|term()}start_channel(Host, Options) ->start_channel(Host, Port, Options) -> {ok, Pid, ConnectionRef} | {error, reason()|term()}start_channel(TcpSocket) ->start_channel(TcpSocket, Options) -> {ok, Pid, ConnectionRef} | {error, reason()|term()}
类型
The socket is supposed to be from `gen_tcp:connect` or `gen_tcp:accept` with option `{active,false}`
如果不提供连接引用,则设置连接,并返回新连接。启动SSH通道进程以处理与SFTP服务器的通信。回归pid
因为此过程将用作本模块中所有其他API函数的输入。
备选方案:
{timeout, timeout()}
有两种方法可以为基础ssh连接设置超时:
- 如果设置了连接超时选项
connect_timeout
,则该值也用于协商超时,并timeout
忽略此选项()。
- 否则,此选项(
timeout
)仅用作协商超时,并且没有设置连接超时
该值默认为infinity
。
{sftp_vsn, integer()}
所需的SFTP协议版本。实际版本是SFTP服务器所需版本和支持的最大版本的最小值。
所有其他选项直接传递给ssh:connect/3
如果已经提供连接,则忽略。
stop_channel(ChannelPid) -> ok
类型
停止SFTP频道。不关闭SSH连接。使用ssh:close/1
关闭它。
write(ChannelPid, Handle, Data) ->write(ChannelPid, Handle, Data, Timeout) -> ok | {error, reason()}
类型
将数据写入Handle引用的文件。 该文件将用写入或附加标志打开。 如果成功则返回ok,否则返回{error,reason()}。
write_file(ChannelPid, File, Iolist) ->write_file(ChannelPid, File, Iolist, Timeout) -> ok | {error, reason()}
类型
将文件写入服务器。如果该文件不存在,则会创建该文件,但如果该文件存在,则会被覆盖。
write_file_info(ChannelPid, Name, Info) ->write_file_info(ChannelPid, Name, Info, Timeout) -> ok | {error, reason()}
类型
将文件信息从file_info记录写入由Name指定的文件。 有关记录的信息,请参阅file:write_file_info / [2,3]。