![wget 和 scp 作为管道](https://linux22.com/image/144242/wget%20%E5%92%8C%20scp%20%E4%BD%9C%E4%B8%BA%E7%AE%A1%E9%81%93.png)
我们可以使用 wget 和 scp 作为管道吗?我想从服务器获取文件并将其复制到另一台服务器。我使用了下面的命令,但它不起作用。
wget "$Select_Release_Version_ARTIFACT_URL" | sudo scp [email protected]:/etc/test/
答案1
要在管道中使用wget
,您必须确保它写入stdout
而不是写入文件,因此请使用wget -O- ...
.
AFAIK,您不能使用scp
从 复制stdin
。但是,您可以ssh
改为使用,并让它执行类似 的命令cat
,该命令从 读取stdin
。
所以在一起你会得到类似的东西
wget -O- "$Select_Release_Version_ARTIFACT_URL" | ssh [email protected] 'cat > /etc/test/some_file'
请注意,只会下载和传输单个文件/网页。另请注意,用户test
需要192.168.94.137
创建和写入的权限/etc/test/some_file
。使用sudo
beforessh
不会赋予远程用户test
任何额外的权限。它将允许访问本地计算机上 root 的 ssh 密钥,因此如果这是意图,请保留它。
虽然这演示了如何在 上使用管道ssh
,但在远程计算机上执行会更容易wget
,除非有原因无法做到这一点。
答案2
您可以使用 来代替管道&&
。这将确保scp
运行时wget
退出状态为 0(成功完成)。
wget“$Select_Release_Version_ARTIFACT_URL”&& sudo scp“$Select_Release_Version_ARTIFACT_URL”[电子邮件受保护]:/etc/测试/
其工作原理如下:
wget
下载文件,如果成功,它将启动scp
.
注意:由于您使用的是,因此每次运行此命令时sudo
都会询问用户密码。test