Пройдите через несколько соединений и команд SSH - PullRequest
0 голосов
/ 05 ноября 2018

Моя проблема немного похожа на описанную здесь , но не то же самое . Я не могу использовать sudo на внешних серверах S1 / S2 / S3 (например, для установки пакетов), если они не являются двоичными файлами .

Каждый день я захожу на терминал локально и запускаю:

  1. введите / запустите команду инициализации C1 локально
  2. подключиться к серверу S1 по ssh, используя alias1 (из .bashrc локально )
  3. подключение к серверу S2 из S1 с использованием alias2 (из .bashrc в S1 )
  4. подключиться к серверу S3 из S2 , используя alias3 (...)
  5. команда инициализации type / run C2 in S3
  6. запустить "byobu" в S3 , а затем я делаю обычную работу в byobu.

Я хочу иметь скрипт, который выполняет все эти шаги и оставляет терминал с открытым byobu, потому что я чувствую, что это глупо, вводить все эти команды каждый день, но не знаю, как его изменить:)

моя попытка:

#!/bin/bash
ssh -C2qtnN -D1001 S1 & #C1 which is tunel for the browser
ssh S1
ssh S2 # here it fails, trying to execute "ssh S2" locally
ssh S3 # same as above
C2 # initialization command that has to be run before byobu on S3
byobu #this one wont work either - to open byobu ;S

1 Ответ

0 голосов
/ 13 ноября 2018

Я нашел рабочее решение:

Сценарий ssh_teleport.sh выглядит следующим образом:

#!/bin/bash
ssh -C2qtnN -D1001 S1 &                                                                                                                                                          
echo "tunnel ready!"                                                                                                                                                                                       
ssh -tt $1 'bash -l -c "C2"'

Где $ 1 может быть любым хостом из {S1, S2, S3} а C2 - полная команда (к сожалению, псевдонимы не работают) для запуска по ssh, заданная в $ 1

Чтобы прыгнуть (спасибо @chepner), мне пришлось изменить конфигурацию в .ssh на моей локальной машине, как это описано здесь :

Host S1
    HostName IP_of_S1
    User MyUsername1

Host S2
    HostName someHostname1
    User MyUsername2
    ProxyJump S1

Host S3
    HostName someHostname2
    ProxyJump S2
    User MyUsername3

Последний штрих - добавить псевдоним для .bashrc :

alias teleportS3='./scripts/ssh_teleport.sh S3'

Это делает свое предназначение!

...