Безопасное копирование двух IP-адресов в одной сети на локальный компьютер

448
JWorkin

Я пытаюсь написать bash-скрипт для ssh сначала в IP1 (запрашивает пароль) с моего локального компьютера, а затем ssh в IP2. Однажды в IP2 я хочу, чтобы scp к моей локальной машине.

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/ 

Выше я должен сделать это вручную через командную строку в Linux. Я по сути копирую из 192.168.10.9 на мою локальную машину

У меня нет прямого доступа к IP2. Думайте об этом как о бэкдоре. У IP2 есть пароль, у IP1 нет.

Есть какой-либо способ сделать это? Я написал больше кода, если это не помогло.

Может ли кто-нибудь проверить, могу ли я сделать что-то похожее на то, что было сделано для этого решения: Scp поверх прокси с одной командой с локальной машины?

Я также слышал о переадресации портов ... Как это будет работать с этим примером?

Я очень новичок в написании сценариев Bash и был бы признателен за терпение.

0
По крайней мере, я бы не советовал возиться с конфигурацией ssh ​​корневого пользователя, иначе вы можете заблокировать себя вне машины. Если вы собираетесь попробовать путь конфигурации ssh, обязательно используйте другого пользователя. BeowulfNode42 6 лет назад 0

3 ответа на вопрос

0
Paul

Вы не можете запустить скрипт на одном компьютере, затем запустить ssh на другом компьютере и продолжить выполнение сценария.

Но вы можете выполнить последовательность команд на удаленной машине следующим образом:

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

Это говорит sshв IP1 и передать остаток строки в качестве команды для запуска после входа в систему.

В кавычках указывается команда для запуска, которая представляет собой ssh ​​для второго IP-адреса вместе с командой для запуска после входа в систему.

В этом есть смысл. Я думаю, что в вашем первом предложении вы ошиблись в том, что я имел в виду, но вы понимаете концепцию. Похоже, вы сказали, что моя машина на IP1, и это не так .. нет, Biggie! Что если бы у меня было несколько копий, которые мне нужно было сделать? Т.е. scp сообщение * и лог * ?? JWorkin 6 лет назад 0
Я бы очень хотел использовать эту опцию ... Могу ли я включить несколько команд после localuser @ $ localIP: / home / localuser / Desktop / MessageFolder /, например, больше scp и rm? JWorkin 6 лет назад 0
@JWorkin Конечно, просто разделить точкой с запятой Paul 6 лет назад 0
Я получаю следующую ошибку: «Псевдо-терминал не будет выделен, потому что stdin не является терминалом» Должен ли я использовать ssh -tt? JWorkin 6 лет назад 0
@JWorkin В моем тесте достаточно одного `-t` (ответ обновлен), вы пробовали это? Paul 6 лет назад 0
Я сделал. он не хочет выполнять scp / var / log / message * до тех пор, пока я не нажму выход ... поэтому выход из IP2, откуда я хочу получить данные. Он буквально ничего не делает после входа в IP2, пока я не нажму выход. Я также понял, что я использую buildroot на IP1 и IP2. JWorkin 6 лет назад 0
Небольшое обновление ... ssh -t root @ IP1 'ssh root @ IP2' работает ... но не выполняет никаких дополнительных команд. Мне удалось написать скрипт, который запускал копию на локальном компьютере только один раз на IP2 с помощью команды sh. Если бы я мог запустить ssh -t root @ IP1 'ssh root @ IP2 cd / var / log / sh myscript.sh', это было бы идеально! JWorkin 6 лет назад 0
0
BeowulfNode42

Просто дай мне понять это правильно:

  • localIP хочет файлы в / home / localuser / Desktop / MessageFolder /
  • требуемые файлы находятся на IP2 в / var / log / message *
  • Единственный способ получить доступ к IP2 с IP1

Вам нужно будет использовать ssh / scp с использованием ключей вместо паролей, как описано в https://wiki.archlinux.org/index.php/SSH_keys . Я бы также посоветовал не использовать пользователя root для этой основной операции.

Предполагая, что эти предположения верны, вы можете использовать возможность туннелирования SSH, чтобы машина localIP могла подключиться по ssh / scp к 127.0.0.1:SomeUnusedPort, чтобы добраться до IP2. Основная сложность заключается в том, чтобы узнать, когда следует отключить локальную IP-машину от IP1-машины.

Это быстрый блок кода, чтобы сделать то, что я думаю. Имейте в виду, я не проверял это вообще.

 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"  
Что если бы у меня было несколько копий, которые мне нужно было сделать? Т.е. сообщение scp * и журнал scp *? JWorkin 6 лет назад 0
Вы можете просто поместить несколько строк scp одну за другой, перед последней командой ssh, которая сообщает о закрытии соединения с IP1. BeowulfNode42 6 лет назад 0
0
Daniel B

SSH поддерживает это. Я процитирую ответы отсюда :

согласно справочной странице ssh, ProxyCommand является правильным методом

синтаксис:

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

Или в достаточно новой системе:

Начиная с OpenSSH 7.3 (конец 2016 года), самый простой способ - это настройка ProxyJump . В вашем ~/.ssh/config:

Host B ProxyJump A 

Или в командной строке -J B.

Последнее решение даже поддерживает сколь угодно глубокие цепочки, см. Руководство по ссылкам.

С SCP вы не можете использовать -J, так что это будет выглядеть так:

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

Похожие вопросы