Script de shell da máquina local para executar o comando na máquina remota e, em seguida, continuar na máquina local

9

O problema é este: eu quero copiar arquivos de uma máquina remota.

Estou procurando uma maneira de escrever um script de shell que se conecte à máquina remota, obtenha a localização do arquivo armazenado, assim que eu tiver a localização desconectada do servidor remoto e use scp de dentro da máquina local com o local obtido para copiar o arquivo.

Especificamente, quero saber como, a partir de um script, eu conectaria a uma máquina remota e executaria tarefas nessa máquina. Desconectar e continuar a execução localmente.

    
por gnsr 28.08.2017 / 16:20

4 respostas

15

Solução 1:

remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path

Isso funciona conectando-se à máquina remota, executando alguns comandos e copiando a saída para uma variável em sua máquina local. Diga, ecoando o caminho do arquivo remotamente, capturando-o localmente.

Solução 2:

ssh user@host "determine_path; cat filename" >local_filename

Isso funciona localizando e enviando o arquivo diretamente do remoto e redirecionando-o para um arquivo localmente. Isso pula scp. Isso exige que as etapas anteriores a "cat" não tenham saída (que você pode resolver com & > / dev / null).

    
por 28.08.2017 / 22:48
19

Você pode escrever um script no seguinte formato:

command1
command2
...
ssh user@machine command3
...
command4
command5

Você precisa configurar as chaves SSH para obter command3 executado sem solicitar uma senha.

    
por 28.08.2017 / 16:23
2

Eu suponho que você já tenha alguma idéia de como identificar o arquivo que deseja copiar e que você é capaz ou já escreveu um script ou conjunto de comandos que serão executados na máquina remota. faz esta identificação.

Além disso, também assumirei que esses comandos imprimem na saída padrão o caminho completo para o arquivo ou o caminho relativo para o arquivo, relativo ao diretório inicial do usuário SSH que está sendo usado para a cópia. No meu exemplo, o nome do script é "getfilepath.sh", embora não precise ser um shell script, pode ser algum outro executável ou até mesmo uma série de comandos.

# Script to be executed on local machine.

# put any leading local commands here.

FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .

# put any trailing local commands here.

No código acima, a notação "$ ()" é uma maneira de capturar a saída padrão de um comando como uma variável shell. É bastante normal, mas se você estiver usando um shell que não o entende, você pode cercar o comando com "back-ticks", que são os acentos à esquerda da tecla 1 na maioria dos teclados dos EUA.

    
por 28.08.2017 / 22:56
0

talvez seja possível acionar uma tarefa agendada na máquina remota que faz todo o trabalho.

Isso evitará que você esteja conectado à máquina remota enquanto estiver pesquisando a localização dos arquivos que deseja copiar.

Estou fazendo isso:

A linha de comando

aciona uma tarefa agendada que executa um script de lote no meu caso.

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

Atenciosamente

    
por 29.08.2017 / 11:36

Tags