Como posso executar 'make' e recuperar o binário de um host remoto sem 'ssh'ing duas vezes?

0

Estou trabalhando em um projeto para o qual não tenho o conjunto de ferramentas configurado em minha própria máquina e, portanto, estou desenvolvendo remotamente. Meu fluxo de trabalho agora parece o seguinte:

  • abra o diretório do projeto remoto no gerenciador de arquivos usando o sftp
  • edite alguns arquivos
  • execute make remote , que se conecta à máquina remota via ssh e executa make lá:

    ssh $(HOST) cd $(DIRECTORY) \; make

  • execute make get , que transfere o binário via scp :

    scp $(HOST):$(DIRECTORY)/build/$(FILE) .

  • teste o binário e repita

O problema é que a máquina remota só faz autenticação de senha, então eu tenho que digitar a senha duas vezes em cada ciclo. Não consigo criar e baixar na mesma sessão ssh ?

    
por Silly Freak 23.05.2014 / 17:02

5 respostas

3

Acho que o compartilhamento de sessão SSH seria útil nessa situação. Ele permite que você abra várias sessões em uma única conexão para que você tenha que digitar sua senha apenas uma vez. Em seu .ssh / config:

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

Assim, você pode abrir um terminal, SSH, em seu servidor e executar seu editor. Então você poderia abrir outro terminal, SSH no mesmo servidor usando a conexão compartilhada, e executar make e scp a partir daí. Mais informações:

por 23.05.2014 / 19:27
1

Monte o lado remoto usando o sshfs e trabalhe 'localmente'. Depois de executar seu make remoto, você verá o resultado em seu ponto de montagem local sem copiá-lo explicitamente.

    
por 23.05.2014 / 17:31
0

enquanto combina as duas tarefas remotas em duas sessões pode ser possível, neste caso a montagem sftp do sistema de arquivos remoto pode ser usada. Em vez de usar scp , você pode usar gvfs-move para make get :

gvfs-move sftp://$(HOST)$(REMOTE_HOME)/$(DIRECTORY)/build/$(FILE) .

desde que a montaria já esteja estabelecida, provavelmente é mais rápida que scp , mesmo sem ter que digitar a senha.

    
por 23.05.2014 / 17:02
0

Você pode inserir seu comando make para ler sua senha em uma variável, então você pode usar sshpass para fazer as duas conexões.

Algo como:

read -p "Enter your password: " PASSWORD
sshpass -p $PASSWORD ssh user@host 'cd '$(DIRECTORY)' \; make'
sshpass -p $PASSWORD scp $(HOST):$(DIRECTORY)/build/$(FILE) .
    
por 23.05.2014 / 17:50
0

Eu quero manter a resposta de Roberto aceita, mas ainda compartilho o que acabei fazendo:

Primeiro, usei a sugestão de Roberto para ativar o compartilhamento de sessão: em .ssh/config :

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

Além disso, eu montei o sistema de arquivos remoto usando sshfs (todos no makefile):

mount:
    sshfs $(HOST):$(DIRECTORY) $(MOUNTPOINT)

unmount:
    fusermount -u $(MOUNTPOINT)

Para os alvos reais de construção:

make:
    ssh $(HOST) cd $(DIRECTORY) \; make

clean:
    ssh $(HOST) cd $(DIRECTORY) \; make clean

Como sshfs mantém uma conexão ssh aberta, não preciso inserir a senha enquanto estou trabalhando, e nenhum tratamento especial é necessário para o binário (e é por isso que pulo o install target). A vantagem adicional de ter um ponto de montagem simples é que eu posso usar o git como em qualquer projeto comum.

    
por 26.05.2014 / 09:26

Tags