Preciso transferir um arquivo de log para um host remoto usando sftp de um host Linux. Recebi credenciais para o mesmo do meu grupo de operações. No entanto, como não tenho controle sobre outro host, não posso gerar e compartilhar chaves RSA com o outro host.
Portanto, existe uma maneira de executar o sftp
comando (com o nome de usuário / senha fornecido) de dentro do script Bash por meio de um trabalho cron ?
Encontrei uma pergunta semelhante ao Stack Overflow, Especifique a senha para sftp em um script Bash , mas não houve resposta satisfatória para o meu problema.
SSHPASS=password sshpass -e ...
deveria fazer.sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
foi a peça que faltava para mim.Outra maneira seria usar o lftp:
A desvantagem desse método é que outros usuários no computador podem ler a senha de ferramentas como
ps
e que a senha pode se tornar parte do seu histórico de shell.Uma alternativa mais segura disponível desde o LFTP 4.5.0 é definir a
LFTP_PASSWORD
variável de ambiente e executar o lftp--env-password
. Aqui está um exemplo completo:O LFTP também inclui um recurso interessante de espelhamento (pode incluir exclusão após transferência confirmada
--Remove-source-files
):fonte
put-script
:open sftp://user:password@host; put local-file.name; exit
Executelftp -f put-script
Dessa forma, você não precisa ter o nome de usuário e a senha em uma linha de comando e pode configurar permissões restritivas ao seu arquivo de script.lftp
que mexer comsftp
esshpass
. Boa resposta.O Expect é um ótimo programa para usar.
No Ubuntu, instale-o com:
Em uma máquina CentOS, instale-o com:
Digamos que você queira fazer uma conexão com um servidor sftp e depois fazer upload de um arquivo local da sua máquina local para o servidor sftp remoto
Isso abre uma conexão sftp com sua senha para o servidor.
Em seguida, ele vai para o diretório em que você deseja enviar o arquivo, neste caso "diretório de log"
Isso carrega um arquivo de log do diretório local encontrado em / var / log / com o nome de arquivo file.log no "diretório de log" no servidor remoto
fonte
Você pode usar o lftp interativamente em um script de shell para que a senha não seja salva em .bash_history ou similar, fazendo o seguinte:
Adicione o seguinte ao seu arquivo:
E escreva / saia do editor vi depois de editar o host, o usuário, a passagem e o diretório para a digitação do arquivo put.
:wq
Depois, torne seu script executávelchmod +x test_script.sh
e execute-o./test_script.sh
.fonte
Recentemente, fui convidado a mudar de ftp para sftp, a fim de garantir a transmissão de arquivos entre servidores. Estamos usando o pacote Tectia SSH, que tem uma opção
--password
para passar a senha na linha de comando.exemplo:
sftp --password="password" "userid"@"servername"
Exemplo de lote:
Eu pensei que deveria compartilhar essas informações, já que estava procurando em vários sites, antes de executar o comando help (
sftp -h
), e fiquei surpreso ao ver a opção de senha.fonte
ps
que esteja executando o comando poderá ver sua senha.unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
Você pode substituir ativando a Senha com menos autenticação. Mas você deve instalar as chaves (pub, priv) antes de prosseguir.
Execute os seguintes comandos no servidor local.
Pressione ENTER para todas as opções solicitadas. Nenhum valor precisa ser digitado.
Conecte-se ao servidor remoto usando o seguinte comando
Execute os seguintes comandos no servidor remoto
Execute o seguinte comando no servidor local para testar a autenticação sem senha. Deve ser conectado sem senha.
fonte
lftp -p ${port} -u ${login_id},${password} ${ip_number}
quando invocado a partir de um script de shell, os imprime em algum lugar? Como você resolveu além do sshpass?lftp
e confio nosshpass
Mac e no Linux.Combine sshpass com um arquivo de credenciais bloqueadas e, na prática, é tão seguro quanto qualquer outra coisa - se você tiver uma raiz na caixa para ler o arquivo de credenciais, todas as apostas serão desativadas de qualquer maneira.
fonte
Programa Bash para aguardar que o sftp solicite uma senha e envie-a junto:
Pode ser necessário instalar o expect, altere o texto de 'Senha' para minúsculas 'p' para corresponder ao que o prompt recebe. O problema aqui é que ela expõe sua senha em texto sem formatação no arquivo e também no histórico de comandos. O que quase derrota o propósito de ter uma senha em primeiro lugar.
fonte
Você pode usar o sshpass para isso. Abaixo estão os passos
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
fonte