Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在LinuxBash中,如何通过SFTP将数据传输到远程文件,而不将数据存储在本地文件中?_Linux_Bash_Ssh_Centos_Sftp - Fatal编程技术网

在LinuxBash中,如何通过SFTP将数据传输到远程文件,而不将数据存储在本地文件中?

在LinuxBash中,如何通过SFTP将数据传输到远程文件,而不将数据存储在本地文件中?,linux,bash,ssh,centos,sftp,Linux,Bash,Ssh,Centos,Sftp,我需要能够通过SFTP将数据从内存传输到远程文件。我最初是通过SSH实现的,在工作时发现我没有SSH访问远程位置的权限,只有SFTP访问权限 下面是我的原始SSH代码的一个示例: echo“机密数据”| sshroot@localhostcat>secret\u文件; 这正是我需要的,但以某种形式: sftproot@localhost将$secret\u数据放入secret\u文件; 原则上,我需要数据永远不要存储在本地机器上的文件中,并且完全从内存中处理 感谢您的回复。谢谢。在/etc/

我需要能够通过SFTP将数据从内存传输到远程文件。我最初是通过SSH实现的,在工作时发现我没有SSH访问远程位置的权限,只有SFTP访问权限

下面是我的原始SSH代码的一个示例:

echo“机密数据”| sshroot@localhostcat>secret\u文件;
这正是我需要的,但以某种形式:

sftproot@localhost将$secret\u数据放入secret\u文件;
原则上,我需要数据永远不要存储在本地机器上的文件中,并且完全从内存中处理


感谢您的回复。谢谢。

/etc/fstab
中创建
tmpfs
分区(不存储在驱动器上,仅存储在内存中),将文件存储在那里,然后使用所述方法,如果您确实想避免将文件存储到硬盘中

我通过设置
/tmp
/var/log
来避免在SSD驱动器上写满内容:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
none    /tmp/       tmpfs   size=15%    0   0
#
无/tmp/tmpfs大小=15%0

如果允许使用您自己的、经过黑客攻击的sftp副本,您可以使用

echo "my secret data 2" | (exec 6<&0 ; ( echo put  /proc/self/fd/6 /tmp/secret | sftp user@remote_host))
现在,对于hack:sftp和scp,请确保本地文件是常规文件,但/proc/self/fd/。。。文件描述符是管道。您需要禁用源代码中的检查

对于sftp,您需要修改文件sftp client.c:查找所有出现的
S_ISREG(…)
,并将其替换为
1

如果您不定期检查openssh安全消息,并在必要时重新编译,则这是快速且肮脏的,可能会使您面临安全漏洞。更好的方法是使用带有维护良好的sftp库的脚本语言并使用它。

多协议客户端明确支持从不可查找的文件描述符读取内容:

#!/bin/bash
#      ^^^^ some features used here are not present in /bin/sh

lftp \
  -u remote_username                 \
  -e 'put -o /tmp/secret /dev/stdin' \
  sftp://remote_host                 \
  < <(printf '%s' "$secret_data")
#/bin/bash
#^^^^^此处使用的某些功能在/bin/sh中不存在
lftp\
-远程用户名\
-e'put-o/tmp/secret/dev/stdin'\
sftp://remote_host                 \

<我想真正的要求是数据不在一个容易访问的位置。通过将数据存储在这个位置,虽然数据将保存在内存中,但它不会像本地存储的文件那样容易检查吗?很抱歉,我应该让原来的帖子更清楚地说明这一要求。当然,您可以将
tmpfs
文件系统装载到其他任何人都无法访问的地方。这只是一个例子。有趣的问题。scp和sftp拒绝发送/proc/self/fd/0,因为它不是一个常规文件……如果您不太喜欢bash,这将在使用paramiko.BTW的Python中轻松完成,
echo
对于这项工作来说是一个糟糕的工具选择。在阅读POSIX规范时,您会被允许对数据进行多大程度的破坏而震惊。(内容中的任何地方都有反斜杠?
echo
的输出突然完全由实现定义!)
#!/bin/bash
#      ^^^^ some features used here are not present in /bin/sh

lftp \
  -u remote_username                 \
  -e 'put -o /tmp/secret /dev/stdin' \
  sftp://remote_host                 \
  < <(printf '%s' "$secret_data")