A maioria dos "clientes SSH File Transfer Protocol (SFTP)" são principalmente / inicialmente criados para uso interativo.
Isso não significa que eles não tenham opções de modo em lote e tal, mas se você estiver procurando por uma transferência de arquivos baseada em script através do protocolo SSH, dê uma olhada em scp
ou lftp
.
lftp
(homepage) é o que eu uso em todas as minhas transferências automáticas de arquivos, e tem excelente tratamento de erros com saída confiável status. Foi projetado com confiabilidade em mente.
Existem toneladas de opções para lftp
, e você pode fornecer qualquer ssh
das opções que desejar, como -oStrictHostKeyChecking=yes
se você especificar um programa de conexão específico para usar.
Exemplo:
MYSSHOPTIONS="-oStrichtHostKeyChecking=yes"
CONNPROG="ssh -a -x ${MYSSHOPTIONS}"
cat > ${cmdfile} <<- EOF
set sftp:max-packets-in-flight 16
set sftp:connect-program ${CONNPROG}
open -u ${remoteuser},${password-unless-pubkey-setup} sftp://${remotehost}
put localfile -o remotepathname
EOF
lftp -f ${cmdfile} > ${sendlog} 2>&1
RC=$?
if test $RC -ne 0
then
failed
else
reliably OK
fi
O exemplo é um pouco longo. Ele cria um arquivo de comando que define algumas opções e carrega um arquivo localfile
com opcionalmente outro remotepathname
no outro lado.
variante sftp se você não quiser usar lftp
:
Se você estiver interessado em verificar o acesso ao login do sftp, poderá usar esse modelo como ponto de partida para novas experiências:
#!/bin/sh - mykey=/home/localuser/.ssh/id_rsa remusr=bupuser remhost=server.destination.domain.com tmpfile=/tmp/sftptest.$$ cleanup() { rm -f ${tmpfile} } trap cleanup 0 sftp -i $mykey -oPubkeyAuthentication=yes -oPasswordAuthentication=no -oKbdInteractiveAuthentication=no -oStrichtHostKeyChecking=yes ${remusr}@${remhost} ${tmpfile} 2>&1 dir exit EOF ST=$? if test $ST -ne 0 then echo SFTP LOGIN FAILURE. RC=${ST} 1>&2 exit $ST fi cat ${tmpfile} # or do some clever grepping on it exit $ST