Назад | Перейти на главную страницу

Почему мое соединение netcat не отправляет файл правильно?

Я написал этот сценарий для отправки файла с помощью netcat. Я намерен открыть порт netcat на целевом сервере из источника, таким образом, я делаю все с помощью всего одного скрипта, вместо того, чтобы иметь один на dest и один на источнике.

#!/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-соединение без пароля, а порт открыт в брандмауэре.

Вот еще один лучший ответ, который является хорошим компромиссом между производительностью и безопасностью.

Не стесняйтесь протестировать это.

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; это если вам наплевать на АНБ. ;)

То, что вы делаете, бесполезно.

Вы должны использовать 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