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
Linux 我可以使用从解压-p命令传输的数据来使用SCP吗?_Linux_Pipe_Unzip_Scp - Fatal编程技术网

Linux 我可以使用从解压-p命令传输的数据来使用SCP吗?

Linux 我可以使用从解压-p命令传输的数据来使用SCP吗?,linux,pipe,unzip,scp,Linux,Pipe,Unzip,Scp,我们正在使用: Linux version 2.6.32-696.20.1.el6.x86_64 (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Fri Jan 12 15:07:59 EST 2018 x86_64 x86_64 x86_64 GNU/Linux 我想使用scp(安全复制过程)将数据从一台服务器发送到另一台服务器 我们先解压缩数据。此外,我们只解压缩数据并将其(因此是unzip-p)传输到服务器,而不

我们正在使用:

Linux version 2.6.32-696.20.1.el6.x86_64 (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Fri Jan 12 15:07:59 EST 2018 x86_64 x86_64 x86_64 GNU/Linux
我想使用scp(安全复制过程)将数据从一台服务器发送到另一台服务器

我们先解压缩数据。此外,我们只解压缩数据并将其(因此是unzip-p)传输到服务器,而不是解压缩到本地服务器上的文件然后发送。这是因为服务器是生产服务器,他们不希望我们在生产服务器上存储任何可能累积的额外文件

最初的concept命令如下所示

unzip -p car.zip car1 | scp eagle@svamn14glbsalh:/pacelog/AUTOSYS/upload_event_logs/data/car1
我想告诉Linux要做的是:

  • 从zipfile car.zip仅解压缩文件car1中的数据
  • 将该信息传输到scp命令
  • 使用scp将数据复制到以下服务器上的以下目录:

    eagle@svamn14glbsalh:/pacelog/AUTOSYS/upload\u event\u logs/data/

  • 我得到了使用错误:

    usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
               [-l limit] [-o ssh_option] [-P port] [-S program]
               [[user@]host1:]file1 ... [[user@]host2:]file2
    
    因此,我尝试使用以下命令进行不同的操作:

    unzip -p car.zip car1 >  scp eagle@svamn14glbsalh:/pacelog/AUTOSYS/upload_event_logs/data/car1
    
    我想从解压命令获取数据流并将输出发送到scp命令。。。它不起作用。我得到了以下错误:

    caution: filename not matched:  eagle@svamn14glbsalh:/pacelog/AUTOSYS/upload_event_logs/data/car1
    

    有人有什么想法吗?我遗漏了什么?

    如果您能够在服务器上运行任意命令,您可以使用
    ssh
    实现这一点:

    unzip -p  car.zip car1 | 
      ssh eagle@svamn14glbsalh 'cat > /pacelog/AUTOSYS/upload_event_logs/data/car1'
    

    如果您没有运行任意命令的能力,只有服务器端模式的
    scp
    scp-t
    ,使用OpenSSH),理论上仍然可能,但我不知道如何,由于该模式没有文档记录,请参见。

    如果您能够在服务器上运行任意命令,则可以使用
    ssh
    执行此操作:

    unzip -p  car.zip car1 | 
      ssh eagle@svamn14glbsalh 'cat > /pacelog/AUTOSYS/upload_event_logs/data/car1'
    

    如果您不具备运行任意命令的能力,那么只有服务器端模式的
    scp
    scp-t
    ,使用OpenSSH),理论上仍然是可能的,但我不知道如何实现,因为该模式没有文档记录,请参见。

    scp不适合您的目的。SCP协议不支持将大小未知的字节流发送到远程系统以保存为文件。用于发送文件的SCP协议消息要求首先发送文件的大小,然后是组成文件的字节。对于从管道读取的字节流,您通常不知道管道将产生多少字节,因此无法发送包含正确大小的SCP协议消息

    (据我所知,SCP协议的最佳在线描述是。请注意“C”消息。)

    SFTP协议可以用于这类事情。据我所知,普通的
    sftp
    命令行实用程序不支持读取管道并将其存储为远程文件。但是大多数现代编程语言(perl、python、ruby、C#、Java、C等)都有SSH/SFTP库。如果您知道如何使用这些语言中的一种,那么编写一个能够满足您需要的实用程序应该很简单

    如果您一直使用shell脚本,那么就有可能伪造足够多的SCP协议来传输文件。下面是一个例子:

    #!/bin/bash
    cmd='cat /etc/group'
    
    size=$($cmd | wc -c)    
    {
            echo C0644 $size some-file
            $cmd
            echo -n -e '\000'
    } | ssh user@host scp -v -p -t /some/directory
    

    这将在具有权限644的远程系统上的
    /some/目录
    中创建
    一些文件
    。文件内容将是
    $cmd
    写入其标准输出的内容。请注意,您将运行该命令两次,无论这意味着什么样的资源消耗和副作用。并且命令每次必须输出相同的字节数。

    SCP不适合您的用途。SCP协议不支持将大小未知的字节流发送到远程系统以保存为文件。用于发送文件的SCP协议消息要求首先发送文件的大小,然后是组成文件的字节。对于从管道读取的字节流,您通常不知道管道将产生多少字节,因此无法发送包含正确大小的SCP协议消息

    (据我所知,SCP协议的最佳在线描述是。请注意“C”消息。)

    SFTP协议可以用于这类事情。据我所知,普通的
    sftp
    命令行实用程序不支持读取管道并将其存储为远程文件。但是大多数现代编程语言(perl、python、ruby、C#、Java、C等)都有SSH/SFTP库。如果您知道如何使用这些语言中的一种,那么编写一个能够满足您需要的实用程序应该很简单

    如果您一直使用shell脚本,那么就有可能伪造足够多的SCP协议来传输文件。下面是一个例子:

    #!/bin/bash
    cmd='cat /etc/group'
    
    size=$($cmd | wc -c)    
    {
            echo C0644 $size some-file
            $cmd
            echo -n -e '\000'
    } | ssh user@host scp -v -p -t /some/directory
    

    这将在具有权限644的远程系统上的
    /some/目录
    中创建
    一些文件
    。文件内容将是
    $cmd
    写入其标准输出的内容。请注意,您将运行该命令两次,无论这意味着什么样的资源消耗和副作用。并且该命令每次必须输出相同的字节数。

    不,您的解决方案工作正常。解压-p car.zip car1 | ssheagle@svamn14glbsalh“cat>/pacelog/AUTOSYS/upload\u event\u logs/data/car1”就成功了!谢谢不,你的解决方案很好用。解压-p car.zip car1 | ssheagle@svamn14glbsalh“cat>/pacelog/AUTOSYS/upload\u event\u logs/data/car1”就成功了!谢谢