Script para obter o arquivo do SFTP e executá-lo

2

Temos 5 servidores executando nosso código: A, B, C, D e E.

De uma máquina local, nós transferimos o arquivo para A. Então

ssh id@A
su - applicationname
sftp id@A
get <file>
bye
tar -xzf <file>
logout
logout

O mesmo procedimento que aplicamos para os outros B a E.

Existe alguma maneira de simplificar isso usando o script?

Solicitamos que a equipe do Linux forneça autenticação sem senha. Mas não sabemos como fazer o sftp dentro de uma sessão SSH usando um script.

    
por Novice User 18.11.2012 / 14:58

2 respostas

4

Melhor e mais fácil é usar scp em vez de sftp .

Se scp realmente não for uma opção, você pode ler os comandos sftp usando um 'aqui documento', mas é muito difícil criar um script em torno de erros .

sftp username@server << %EOF%
ls
bye
%EOF%

%EOF% pode ser qualquer palavra desejada, desde que comece e termine com % e a última %EOF% deve estar no início de uma linha.

Para login sem senha, leia em 'autenticação de chave ssh'.

Usar sftp dentro de uma sessão ssh soa como um exagero, parece fazer coisas duplas. Por que não iniciar a cópia da máquina local?

    
por 18.11.2012 / 19:05
0

Você pode usar lftp para fazer a autenticação de senha de um script. A autenticação sem senha pode ser muito perigosa às vezes. Como vejo que você está invocando esse script para vários servidores, você terá que inserir manualmente as senhas toda vez que usar sftp .

Em vez disso, você pode usar lftp para colocar sua senha dentro do script e executá-la como um cron-job. Embora você precise de arquivos diferentes para cada servidor. No entanto, todos eles podem ser executados através de um cron-job para executar *.sh dentro de um diretório que contenha cada cópia do script.

Passos a seguir para autenticação de senha a partir de um script:

  1. primeiro instale o lftp usando yum install lftp ou sudo apt-get install lftp , de acordo com o sabor do linux.

  2. escreva um script como abaixo:

    #!/bin/sh
    
    HOST='ec2#####.us-west-2.compute.amazonaws.com'
    
    USER='ubuntu'
    
    PASSWD='ubuntuuser'
    
    cd directory/where/you/want/to/put/or/get/a/file
    
    lftp << END_OF_SCRIPT
    open sftp://$HOST
    user $USER $PASSWD
    cd /home/anywhere_you_want_the_file_from/
    mput *.txt
    END_OF_SCRIPT
    

Note, por favor, mude o hostname, username e password de acordo com o seu servidor. Além disso, esse script usa 'mput' para obter vários arquivos em /home/anywhere_you_want_the_file_from/ location no local remoto para o local. Se um arquivo único for necessário, 'put' pode ser usado. Qualquer comando do sftp pode ser usado dentro do END_OF_SCRIPT .

    
por 08.06.2016 / 16:57