У меня есть хост, определенный в /etc/hosts
web1
. Существует докер-контейнер с именем 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
- Я думаю, что он пытается
ssh
вstore
контейнер вместо того, чтобы просто выполнить команду, которая бросает эту ошибку, это правильно? Если нет, то в чем проблема? - Есть ли способ сделать это с помощью ProxyCommand, не пытаясь ssh в контейнер, а вместо этого просто использовать docker exec?
- Достаточно ли легко настроить ssh в контейнер? В настоящее время мы не делаем этого как практическое.
- Есть ли другой вариант, кроме псевдонима для
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
, а также в конечном итоге в контейнере
Спасибо за ответы. Я добавил 'RequestTTY yes' в мою запись' web1' в моей '~/.ssh/config', и теперь у меня есть хотя бы псевдоним' ssh-store', используя 'alias ssh-store = 'ssh web1 docker exec -ti store/bin/bash "' Каков пример того, что вы подразумеваете при использовании функции bash? Что будет делать эта функция за пределами того, что делает псевдоним, и где работает функция? – Streamline
добавил пример функции – Jakuje
Ах, это здорово. Спасибо за отличный лакомый кусочек. В качестве бонуса я вижу, что даже функции, определенные таким образом, доступны через выполнение табуляции, поэтому я могу настроить несколько функций и псевдонимов, подобных этому, и выполнить табуляцию. Ницца. Благодарю. – Streamline