sftp client: upload from pipe

Adam Osuchowski adwol at zonk.pl
Sat Jun 22 00:57:17 AEST 2019


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?

Regards.


More information about the openssh-unix-dev mailing list