sftp client: upload from pipe
Damien Miller
djm at mindrot.org
Sat Jun 22 18:48:03 AEST 2019
On Fri, 21 Jun 2019, Adam Osuchowski wrote:
> Hi,
>
> the sftp client from openssh package can't upload data from local pipe
> to remote file. For example, such a command fails:
>
> $ cat file | sftp -b <(echo 'put /dev/stdin /directory/filename') -i ~/.ssh/key user at remote.host
> sftp> put /dev/stdin /directory/filename
> /dev/stdin is not a regular file
>
> What is a purpose for such a behaviour and limitation? As experiment,
> I removed following piece of code which is responsible for this check
> (sftp-client.c, do_upload() function):
>
> if (!S_ISREG(sb.st_mode)) {
> error("%s is not a regular file", local_path);
> close(local_fd);
> return(-1);
> }
>
> and nothing bad happened. It was still possible to upload regular files,
> but additionaly there was an opportunity for upload data piped from other
> command (what in my opinion is very useful feature) and even directly
> from terminal. Would it be possible to remove this restriction from sftp
> client?
IIRC it's there because reads on named pipes can hang if nothing is
attached to them and because reading from devices can have side-effects
(classic example being /dev/mt)
I'm not opposed to relaxing this restriction, but I think that we'd need to
preserve the behaviour I just mentioned.
-d
More information about the openssh-unix-dev
mailing list