Я написал этот сценарий для отправки файла с помощью 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