我们用的是:
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 (安全复制过程)将数据从一个服务器发送到另一个服务器。
我们先解压缩数据。此外,我们只解压缩数据并将其(因此是解压缩-p)传输到服务器,而不是解压缩到本地服务器上的文件,然后发送。这是因为服务器是生产服务器,他们不希望我们在生产服务器上存储任何可能累积的额外文件。
初始的概念命令如下所示;
unzip -p car.zip car1 | scp eagle@svamn14glbsalh:/pacelog/AUTOSYS/upload_event_logs/data/car1我想让Linux做的是:
我得到了用法错误:
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有人有什么想法吗?我遗漏了什么?
发布于 2018-04-18 13:23:41
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-file中创建/some/directory。文件内容将是$cmd写入其标准输出的任何内容。请注意,您正在运行该命令两次,无论这意味着什么资源消耗和副作用。并且该命令必须每次输出相同的字节数。
https://stackoverflow.com/questions/49884079
复制相似问题