为什么我的 netcat 连接无法正确发送文件?

为什么我的 netcat 连接无法正确发送文件?

我编写了这个脚本来使用 netcat 发送文件。我的目的是从源服务器打开目标服务器中的 netcat 端口,这样我只需一个脚本就可以完成所有操作,而不必在目标服务器上和源服务器上各运行一个脚本。

#!/bin/bash

FILE=$1
SERVDEST=$2
SIZE=`du -h --apparent-size $FILE | cut -f1`
DATE=`date +%Y%m%d%H%M`

echo "Sending file $FILE of $SIZE to $SERVDEST" >> NCtransf_$DATE.log
echo "" >> NCtransf_$DATE.log

ssh $SERVDEST "nc -l 6969 > /backup/backupSO/nc_$FILE.tgz" &

#sleep 5       #tried sleeping for some secs but it didn't work either

(/usr/bin/time --format='Transfer took %e seconds' tar czf - $FILE | nc $SERVDEST 6969) &>> NCtransf_$DATE.log

echo "" >> NCtransf_$DATE.log

由于某种原因,文件在目标中创建,但其大小为 0。信息从未通过,并且 netcat 端口在另一端保持打开状态。我也尝试ssh $SERVDEST "nc -l 6969 > /backup/backupSO/nc_$FILE.tgz" &为此更改此行ssh $SERVDEST "nohup nc -l 6969 > /backup/backupSO/nc_$FILE.tgz" &,但结果相同。

如果我尝试将相同的线路分开(在目的地手动打开端口),它就会像魔法一样工作。仅供参考,我有无密码的 ssh 连接,并且端口在防火墙中打开。

答案1

你所做的都是无用的。

你应该使用SCP

它基本上是通过 ssh 发送文件的命令。

例子:

FILE=$1
SERVDEST=$2
SIZE=`du -h --apparent-size $FILE | cut -f1`
DATE=`date +%Y%m%d%H%M`
tar czv /tmp/tmpfile.tar.gz $FILE
scp $FILE $SERVDEST:/backup/backupSO/nc_$FILE.tgz
rm /tmp/tmpfile.tar.gz

答案2

这是另一个更好的答案,它是性能和安全性之间的一个很好的折衷。

请随意测试一下。

FILE=$1
SERVDEST=$2
SIZE=`du -h --apparent-size $FILE | cut -f1`
DATE=`date +%Y%m%d%H%M`
tar czv - $FILE | ssh $SERVDEST "cat - > /backup/backupSO/nc_$FILE.tgz"

为了获得更高的性能,您可以设置CompressionLevel(使用-o)并使用不同的Cipher;如果您不关心 NSA 的话。;)

相关内容