Faz upload do arquivo para o servidor ftp usando comandos no shell script? [fechadas]

4

Eu quero fazer upload de um arquivo do meu servidor Linux para algum servidor FTP. Eu sei que usamos os comandos put e get para fazer upload e download de arquivos e o comando sftp para se conectar ao servidor FTP.

Mas eu queria fazer tudo isso em um script de shell e não tenho idéia de como se conectar ao FTP usando o comando sftp em algum script para fazer upload de algum arquivo. Isso é o que eu sei, mas não sei como funcionará dentro de um script sh.

sftp -v -oIdentityFile=path user@server
put localPath ftpPath

Alguém pode me ajudar?

    
por Elvin 18.12.2013 / 04:27

7 respostas

12

sftp é um comando shell. Ele lê comandos SFTP em sua entrada padrão.

Você pode usar um documento aqui para passar a entrada para um comando.

sftp -v -oIdentityFile=path user@server <<EOF
put localPath ftpPath
EOF

Você pode usar variáveis dentro do documento aqui.

local_path=/path/to/local/file
remote_path=/somewhere/or/other
sftp -v -oIdentityFile=path user@server <<EOF
put $local_path $remote_path
EOF

Esta não é a maneira mais simples de copiar um arquivo. O SFTP permite navegar e transferir arquivos, mas há também um comando shell para copiar diretamente um arquivo (ou até mesmo um diretório, recursivamente).

scp -o IdentityFile=path localPath user@server:remotePath
    
por 18.12.2013 / 23:45
4

Você pode especificar um arquivo em lote usando a opção -b .

-b batchfile

Ripado da página man do sftp:

Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it should be used in conjunction with non-interactive authentication. A batchfile of ‘-’ may be used to indicate standard input. sftp will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir. Termination on error can be sup‐pressed on a command by command basis by prefixing the command with a ‘-’ character (for example, -rm /tmp/blah*).

    
por 19.12.2013 / 12:50
1

Você já considerou usar rsync ?

Fazer upload de arquivos via rsync é sem dúvida a maneira mais preferida e também a mais fácil de criar scripts. Ele usa SSH, RSH ou seu próprio protocolo ("rsync: // ...") para transferência de destino e fonte.

É mais do que provável que rsync esteja instalado em seu sistema. Se você puder acessá-lo via SSH, você pode usar a sintaxe scp :

rsync -alPvvz local_path user@host:remote_path

Se você precisar de um oIdent, sugiro que leia este unix .SE pergunta , onde isso é explicado.

Eu entendo que não é exatamente o que você pediu, mas dado que rsync é praticamente um padrão da indústria, é pelo menos algo a considerar.

    
por 07.03.2014 / 03:31
0

Os programas SFTP usam o protocolo ssh para acessar, gerenciar e transferir arquivos para sistemas remotos. Ele usa protocolos diferentes para transferir arquivos. Os nomes de usuários e a transferência de dados são criptografados durante a comunicação. Você não pode usar o cliente ftp para se conectar ao servidor sftp ou ao cliente sftp para se conectar ao servidor ftp que suporta apenas o ftp.

    
por 18.12.2013 / 05:37
0

Se você tiver acesso sftp à máquina, talvez também tenha acesso ssh à máquina.

Se você tem acesso ssh, deve verificar se o comando rsync está disponível.

O rsync tem algumas vantagens sobre o ftp (conexão segura, carrega apenas as partes do arquivo que foram alteradas - muito rápido em algumas circunstâncias, fácil espelhamento recursivo, compressão).

link

Ele pode ser facilmente usado em scripts de shell. A única coisa que você precisa fazer é configurar a "autenticação baseada em chave"

    
por 18.12.2013 / 06:54
-1

Para fazer upload do arquivo1 para 127.0.0.1, use

ftp -u [email protected]: file1

Você será solicitado a fornecer uma senha. Para contornar isso, você pode preencher o seu .netrc:

cd
cat >.netrc<<EOF
machine 127.0.0.1
login user
password password
EOF
chmod 600 .netrc
    
por 18.12.2013 / 05:38
-1

Você pode usar comandos ftp dentro de um shellscript da seguinte maneira:

ftp -dv ${SSHHOST} >$dirFtp/$fichFtpLog <<_FINFTP_
    ascii
    put ${dirwork}/${fichSalida} ${rutaSubida}/${fichero}
    close
    quit
_FINFTP_

dirwork / fichSalida ... são shellscript vars como exemplo. Você tem que notar que, para usar o ftp dessa maneira, você deve configurar o .netrc para que o seu login seja transparente para o comando ftp.

Como resumo, você pode emitir comandos como se estivesse usando o comando ftp entre as tags FINFTP (você pode usar a tag que deseja).

    
por 07.04.2014 / 13:45