2015-12-24 2 views
2

У меня есть хост, определенный в /etc/hostsweb1. Существует докер-контейнер с именем store.Как правильно настроить ssh proxycommand для запуска docker exec?

Хотя на моей рабочей станции я могу SSH в машину и выполнить команду, чтобы войти в контейнер в интерактивном режиме, как этот

ssh -t -t web1 docker exec -ti store /bin/bash 

Это правильно падает мне прямо в контейнер, как корень, как я надеялся.

Однако, я действительно хочу, чтобы определить псевдо хост с именем store и установить его в моем ~/.ssh/config файл, как это с помощью ProxyCommand так что я могу использовать ssh store

Host store 
ProxyCommand ssh -t -t web1 docker exec -ti store /bin/bash 

Но он не со следующей ошибкой:

Bad packet length 218958363. 
ssh_dispatch_run_fatal: Connection to UNKNOWN: message authentication code incorrect 
Killed by signal 1. 

Если добавить -v для некоторой отладки, последние две строки непосредственно перед блоком выше

debug1: Authenticating to store:22 as 'user1' 
debug1: SSH2_MSG_KEXINIT sent 
  1. Я думаю, что он пытается ssh в store контейнер вместо того, чтобы просто выполнить команду, которая бросает эту ошибку, это правильно? Если нет, то в чем проблема?
  2. Есть ли способ сделать это с помощью ProxyCommand, не пытаясь ssh в контейнер, а вместо этого просто использовать docker exec?
  3. Достаточно ли легко настроить ssh в контейнер? В настоящее время мы не делаем этого как практическое.
  4. Есть ли другой вариант, кроме псевдонима для ssh-store?

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

Отредактировано:

Решение:

Как Jakuje указано, используя ProxyCommand с SSH не собирается позволить дальнейшее бесконтактной команды SSH. Поэтому я просто использую псевдоним и потенциально функцию bash для этого, чтобы выполнить это. Я настраиваю оба.

Также по рекомендации Jakuje в ~/.ssh/конфигурации

Host web1 
RequestTTY yes 

в ~/.bash_aliases

alias ssh-store="ssh web1 docker exec -ti store /bin/bash" 

, так что я могу сделать ssh-store и в конечном итоге в контейнере

или в ~ /.Bashrc

function ssh-web1 { ssh web1 docker exec -ti $1 /bin/bash; } 

, так что я могу сделать ssh-web1 store, а также в конечном итоге в контейнере

ответ

0

I think it is trying ssh into the store container instead of just executing the command which is throwing that error, is that correct? If not what is the issue?

Да

Is there a way to do this using ProxyCommand without trying to ssh into the container but instead just use the docker exec?

Нет, это не работает таким образом. ProxyCommand ожидает, что другим шагом будет также сеанс SSH, а не прямой запрос bash.

Is it easy enough to also setup the ssh into the container? We currently aren't doing that as a matter of practice.

Я думаю, что это лишние накладные расходы. Но это возможно, как описано во многих других вопросах.

По крайней мере, вы можете избавиться от -t -t, указав RequestTTY в своем ~/.ssh/config. Но остальные должны быть псевдонимом bash или функцией (если у вас больше хоста function).

function ssh-docker { 
    ssh web1 docker exec -ti $1 /bin/bash 
} 

, а затем вы можете назвать это независимо контейнер, как это:

ssh-docker store 

Вы просто хранить такую ​​функцию в ваш .bashrc или где хранятся ваши псевдонимы.

+0

Спасибо за ответы. Я добавил 'RequestTTY yes' в мою запись' web1' в моей '~/.ssh/config', и теперь у меня есть хотя бы псевдоним' ssh-store', используя 'alias ssh-store = 'ssh web1 docker exec -ti store/bin/bash "' Каков пример того, что вы подразумеваете при использовании функции bash? Что будет делать эта функция за пределами того, что делает псевдоним, и где работает функция? – Streamline

+0

добавил пример функции – Jakuje

+0

Ах, это здорово. Спасибо за отличный лакомый кусочек. В качестве бонуса я вижу, что даже функции, определенные таким образом, доступны через выполнение табуляции, поэтому я могу настроить несколько функций и псевдонимов, подобных этому, и выполнить табуляцию. Ницца. Благодарю. – Streamline

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