Preciso fazer upload de arquivos para um servidor SFTP como parte de um processo de pipeline automatizado (portanto , não pode ser interativo). Eu não tenho acesso ssh, então não posso usar scp ou rsync.
Tive algum sucesso usando a solução proposta nesta resposta :
sftp user@server <<EOF
put localPath remotePath
EOF
No entanto, estou procurando algo um pouco mais sólido, pois não terei nenhuma indicação se isso falhar. Por exemplo, se eu quiser baixar de um servidor SFTP, posso usar a seguinte sintaxe:
sftp user@server:remotePath localPath
Existe um one-liner equivalente para upload?
Você pode usar o "Modo de lote" do sftp. Do manual:
O que significa que você cria um arquivo temporário com os comandos e executa os comandos no arquivo com "sftp -b tempfile user@server"
Existem outras ferramentas disponíveis para essas coisas, por exemplo lftp
A resposta do Marco me levou a criar um script simples para agrupar o processo, mas essencialmente o que estou fazendo no script é o seguinte:
put {local} {remote}
comandos para o(s) arquivo(s) a serem carregados.sftp -b {batch_file} -i {identity_file} -o StrictHostKeyChecking=no {username}@{hostname}
Este comando funcionará sem a necessidade de nenhuma entrada do usuário e terá um código de erro que pode ser verificado quanto ao sucesso ou falha.
Eu só queria incluir esta resposta aqui de uma forma mais completa para futuros visitantes.