Cópia segura em dois IPs na mesma rede para a máquina local

0

Eu estou tentando escrever um script bash para ssh primeiro em IP1 (pede uma senha) da minha máquina localhost e, em seguida, ssh em IP2. Uma vez no IP2 eu quero scp para minha máquina local.

IP1=192.168.10.10
IP2=192.168.10.9

ssh root@$IP1
ssh root@$IP2

cd /var/log

scp message* localuser@$localIP:/home/localuser/Desktop/MessageFolder/

O acima é o que eu tenho que fazer manualmente através da linha de comando no Linux. Eu essencialmente copio de 192.168.10.9 para minha máquina local

Eu não tenho acesso direto ao IP2. Pense nisso como um backdoor. IP2 tem uma senha, IP1 não.

Existe alguma maneira de fazer isso? Eu tenho mais código escrito se isso não for útil.

Alguém pode verificar se posso fazer algo semelhante ao que foi feito para esta solução: Scp através de um proxy com um comando da máquina local?

Também ouvi falar de encaminhamento de porta ... Como isso funcionaria com esse exemplo?

Sou muito novo no bash scripting e gostaria de ter um pouco de paciência.

    
por JWorkin 29.04.2018 / 15:09

3 respostas

0

O SSH vem com suporte para isso. Cito respostas de aqui :

according to the ssh man page, ProxyCommand is the correct method

the syntax being:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

Ou, em um sistema suficientemente recente:

As of OpenSSH 7.3 (late 2016) the easiest way is the ProxyJump setting. In your ~/.ssh/config:

Host B
  ProxyJump A

Or on the command line, , -J B.

A última solução suporta até cadeias arbitrariamente profundas, consulte o guia vinculado.

Com o SCP, você não pode usar -J , então será assim:

scp -o "ProxyJump root@$IP1" root@$IP2:/var/log/message* /home/localuser/Desktop/MessageFolder/
    
por 29.04.2018 / 22:41
0

Você não pode iniciar um script em uma máquina, depois ssh em outra máquina e fazer com que o script continue lá.

Mas você pode executar uma sequência de comandos em uma máquina remota assim:

ssh -t root@IP1 'ssh root@IP2 scp /var/log/message*  <user>@<IP>:/home/localuser/Desktop/MessageFolder/; ls /var/log/message*'

Isso está dizendo ssh no IP1 e passa o restante da linha como um comando para executar uma vez logado.

Entre aspas é o comando para executar, que é o ssh no segundo IP, junto com o comando para executar uma vez logado lá.

    
por 29.04.2018 / 15:33
0

Então, deixe-me ver se entendi:

  • localIP quer os arquivos em / home / localuser / Desktop / MessageFolder /
  • os arquivos desejados estão no IP2 em / var / log / message *
  • A única maneira de acessar o IP2 é do IP1

Você precisará procurar usar ssh / scp com o uso de chaves em vez de senhas, como descrito por link . Eu também aconselho não usar o usuário root para esta operação básica.

Supondo que essas suposições estejam corretas, você pode usar a capacidade de tunelamento do SSH para que a máquina localIP possa ssh / scp em 127.0.0.1:SomeUnusedPort para chegar ao IP2. A principal parte complicada será saber quando desconectar a máquina IP local da máquina IP1.

Este é um bloco rápido de código para fazer o que eu estou pensando. Esteja ciente, eu não testei isso em tudo.


IP1=192.168.10.10
IP2=192.168.10.9
SomeUnusedPortOnLocalIP=2209

ssh -L $SomeUnusedPortOnLocalIP $IP2:22 root@$IP1 "while [ ! -f /tmp/disconLocalIP.now ]; do sleep 2; done; rm /tmp/disconLocalIP.now " &
# connects to IP1 establishing an ssh tunnel between localIP and IP2
# the loop testing for the existence of a file to let it know when to disconnect
# the & symbol lets the command run in the background and the script to continue with it still running

# wait for the connection to actually establish fully before proceeding.
sleep 10 

# connect to port tunnel on localIP to get files from IP2
scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/message* /home/localuser/Desktop/MessageFolder/
scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/log* /home/localuser/Desktop/OtherLogs/

# put file on IP1 to tell loop to end and exit previous ssh session
ssh root@$IP1 "touch /tmp/disconLocalIP.now"

    
por 29.04.2018 / 16:34

Tags