2014-09-03 4 views
3

Я пытался автоматически вводить ssh-соединение, используя скрипт. This предыдущий пост SOF помог мне до сих пор. Использование одного соединения работает (первый оператор ssh). Тем не менее, я хочу, чтобы создать еще одно соединение SSH когда-то соединял, который я думал, может выглядеть следующим образом:Подключитесь к нескольким связям ssh через скрипты

#! /bin/bash 
# My ssh script 

sshpass -p "MY_PASSWORD1" ssh -o StrictHostKeyChecking=no *my_hostname_1* 
sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no *my_hostname_2* 

При запуске сценария, я получаю подключен только к my_hostname_1 и второй ssh команды не не работает, пока я не выход первое соединение ssh.

Я попытался с помощью if заявление так:

if [ "$HOSTNAME" = my_host_name_1 ]; then 
    sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no *my_hostname_2* 
fi 

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

+1

Я имею в виду, как он должен работать? У вас не может быть двух активных сеансов SSH в одном окне (несмотря на то, что вы разбиваете панель). Что именно ты пытаешься сделать? –

+1

Если вы надеетесь отправить один и тот же CMD (в то же время) на несколько компьютеров, это не решение. (Существует программа sysadmin, которая сделает это, но я не могу найти это имя прямо сейчас). В противном случае прочитайте о запуске shell cmds в фоновом режиме с символом '&' в конце cmd-линии. Удачи. – shellter

+1

@TimZimmermann: он, вероятно, хочет использовать первый хост в качестве шлюза ко второму. – salva

ответ

3

Вот пример ProxyCommand как предложено @lihao:

#!/bin/bash 

sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no \ 
    -o ProxyCommand='sshpass -p "MY_PASSWORD1" ssh m_hostname_1 netcat -w 1 %h %p' \ 
    my_hostname_2 

Вы проксирование через первый узел, чтобы добраться до второго. Предполагается, что у вас есть netcat, установленный на my_hostname_2. Если нет, вам необходимо установить его.

Вы также можете установить в файле ~/.ssh/config так что вам не нужен прокси-материал в командной строке:

Host my_hostname_1 
    HostName my_hostname_1 

Host my_hostname_2 
    HostName my_hostname_2 
    ProxyCommand ssh my_hostname_1 netcat -w 1 %h %p 

Однако, это немного сложнее с обработкой пароля. Хотя вы можете разместить здесь sshpass, неплохо было бы иметь пароли в виде обычного текста. Использование проверки подлинности на основе ключей может быть лучше.

+2

С последними версиями 'ssh' вы можете избежать вызова' netcat': 'ProxyCommand ssh my_hostname_1 -W% h:% p' (для этого требуются туннели, включенные на шлюзе). – salva

0

Сценарий Bash представляет собой последовательность команд.

echo moo 
echo bar 

будет работать echo moo и ждать его завершения, а затем запустить следующую команду.

Вы можете запустить удаленную команду:

ssh remote echo moo 

, который будет подключаться к remote, запустите команду, и выход. Если после этого в файле сценария есть дополнительные команды, оболочка, выполняющая эти команды, будет продолжена со следующей, очевидно, на узле, где вы запустили скрипт.

Для подключения к одному хосту от другого, можно в принципе сделать

ssh host1 ssh host2 

но прокси-команды предложил @zerodiff улучшает по нескольким аспектам опыта.

Смежные вопросы