Подтвердить что ты не робот

Как загрузить (FTP) файлы на сервер в bash script?

Я пытаюсь написать bash script, который загружает файл на сервер. Как я могу это достичь? Является ли bash script правильным для использования?

4b9b3361

Ответ 1

Вы действительно должны использовать SSH/SCP/SFTP для этого, а не FTP. SSH/SCP имеют преимущества обеспечения большей безопасности и работы с общедоступными/закрытыми ключами, что позволяет запускать его без имени пользователя или пароля.

Вы можете отправить один файл:

scp <file to upload> <username>@<hostname>:<destination path>

Или весь каталог:

scp -r <directory to upload> <username>@<hostname>:<destination path>

Подробнее о настройке ключей и перемещении файлов на сервер с помощью RSYNC, что полезно, если у вас много файлов для перемещения, или если вы иногда получаете только один новый файл из набора случайных файлов, посмотрите на:

http://troy.jdmz.net/rsync/index.html

Вы также можете выполнить одну команду после sshing на сервере:

От man ssh

ssh [... snipped...] hostname [команда] Если задана команда, это выполненный на удаленном хосте вместо оболочки входа.

Итак, пример команды:

ssh [email protected] bunzip file_just_sent.bz2

Если вы можете использовать SFTP с ключами, чтобы получить преимущество защищенного соединения, есть два трюка, которые я использовал для выполнения команд.

Сначала вы можете передавать команды с использованием эха и канала

echo "put files*.xml" | sftp -p -i ~/.ssh/key_name [email protected]

Вы также можете использовать пакетный файл с параметром -b:

sftp -b batchfile.txt ~/.ssh/key_name [email protected]

Если вы понимаете, что FTP небезопасен и более ограничен, и вы действительно хотите script его...

Там есть отличная статья на http://www.stratigery.com/scripting.ftp.html

#!/bin/sh
HOST='ftp.example.com'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
put $FILE
quit
END_SCRIPT
exit 0

"-n" to ftp гарантирует, что команда не попытается получить пароль от текущего терминала. Другая причудливая часть - использование heredoc: <<END_SCRIPT запускает heredoc, а затем тот же самый END_SCRIPT в начале строки сам по себе заканчивает heredoc. Команда binary установит его в двоичный режим, который поможет, если вы переносите что-то, отличное от текстового файла.

Ответ 2

Вы можете использовать heredoc, чтобы сделать это, например.

ftp -n $Server <<End-Of-Session
# -n option disables auto-logon

user anonymous "$Password"
binary
cd $Directory
put "$Filename.lsm"
put "$Filename.tar.gz"
bye
End-Of-Session

поэтому процесс ftp подается на stdin со всеми значениями до End-Of-Session. Полезный совет для нереста любого процесса, а не только ftp! Обратите внимание, что это экономит нереста отдельного процесса (эхо, кошка и т.д.). Не важно экономить ресурсы, но стоит иметь в виду.

Ответ 3

Установите ncftpput и ncftpget. Они обычно являются частью одного и того же пакета.

Ответ 4

#/bin/bash
# $1 is the file name
# usage: this_script  <filename>
IP_address="xx.xxx.xx.xx"
username="username"
domain=my.ftp.domain
password=password

echo "
 verbose
 open $IP_address
 USER $username $password
 put $1
 bye
" | ftp -n > ftp_$$.log

Ответ 5

в одной строке:

ftp -in -u ftp://username:[email protected]/path/to/ localfile

Ответ 6

используйте это, чтобы загрузить файл в удаленном месте

#!/bin/bash
#$1 is the file name
#usage:this_script <filename>
HOST='your host'
USER="your user"
PASSWD="pass"
FILE="abc.php"
REMOTEPATH='/html'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd $REMOTEPATH
put $FILE 
quit
END_SCRIPT
exit 0

Ответ 7

Не нужно усложнять материал - это должно работать:

#/bin/bash
echo "
 verbose
 open ftp.mydomain.net
 user myusername mypassword
 ascii
 put textfile1
 put textfile2
 bin
 put binaryfile1
 put binaryfile2
 bye
" | ftp -n > ftp_$$.log

или вы можете использовать mput, если у вас много файлов...

Ответ 8

cd C:\Program Files (x86)\WinSCP

winscp.exe/console/command "открыть UserName: ** @Server" "положить путь к файлу"

Ответ 9

Рабочий пример для размещения файла на корне........... см. его очень простой

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT
exit 0

Ответ 10

если вы хотите использовать его внутри 'for', чтобы скопировать последние сгенерированные файлы для ежедневного bacakup...

j=0  
var="`find /backup/path/ -name 'something*' -type f -mtime -1`"  
#we have in $var some files with last day change date

for i in $var  
  do  
  j=$(( $j + 1 ))  
  dirname="`dirname $i`"  
  filename="`basename $i`"  
  /usr/bin/ftp -in >> /tmp/ftp.good 2>> /tmp/ftp.bad << EOF  
    open 123.456.789.012  
    user user_name passwd  
    bin  
    lcd $dirname  
    put $filename  
    quit  
  EOF      #end of ftp  
done       #end of for iteration

Ответ 11

echo -e "open <ftp.hostname>\nuser <username> <password>\nbinary\nmkdir New_Folder\nquit"|ftp -nv