كيفية الحصول على اتصال ssh مع حاوية عامل الإرساء على OSX(boot2docker)

StackOverflow https://stackoverflow.com//questions/23014684

سؤال

أستخدم عامل الإرساء على OSX مع boot2docker.

أرغب في الحصول على اتصال Ssh من الجهاز الطرفي الخاص بي في حاوية قيد التشغيل.

لكن لا أستطيع فعل هذا :(

أعتقد أن السبب هو أن Docker يعمل في جهاز افتراضي.

هل كانت مفيدة؟

المحلول

هناك العديد من الأشياء التي يجب عليك القيام بها لتمكين ssh'ing في حاوية تعمل في جهاز افتراضي:

  1. تثبيت وتشغيل sshd في الحاوية الخاصة بك (مثال). sshd لا يكون موجودًا بشكل افتراضي لأن الحاويات عادةً ما تقوم بتشغيل عملية واحدة فقط، على الرغم من أنها يمكن أن تقوم بتشغيل أي عدد تريده.
  2. EXPOSE منفذ كجزء من إنشاء الصورة، عادةً 22، بحيث عندما تقوم بتشغيل الحاوية، يتصل البرنامج الخفي بالمنفذ EXPOSEمنفذ داخل الحاوية ويمكن أن ينكشف شيء ما على الجزء الخارجي من الحاوية.
  3. عند تشغيل الحاوية، عليك أن تقرر كيفية تعيين هذا المنفذ.يمكنك السماح لـ Docker بالقيام بذلك تلقائيًا أو أن يكون صريحًا.أقترح أن تكون صريحًا: docker run -p 42222:22 ... الذي يقوم بتعيين المنفذ 42222 على الجهاز الظاهري إلى المنفذ 22 في الحاوية.
  4. أضف خريطة منفذ إلى الجهاز الافتراضي لعرض المنفذ لمضيفك.على سبيل المثالعندما لا يكون جهاز VM الخاص بك قيد التشغيل، يمكنك إضافة تعيين مثل هذا: VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,42222,,42222"

بعد ذلك، من مضيفك، يجب أن تكون قادرًا على الانتقال إلى المنفذ 42222 على المضيف للوصول إلى البرنامج الخفي ssh الخاص بالحاوية.

إليك ما يحدث عندما أقوم بالخطوات المذكورة أعلاه:

$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,42222,,42222"
$ ./boot2docker start
[2014-04-11 12:07:35] Starting boot2docker-vm...
[2014-04-11 12:07:55] Started.
$ docker run -d -p 42222:22 dhrp/sshd
Unable to find image 'dhrp/sshd' (tag: latest) locally
Pulling repository dhrp/sshd
2bbfe079a942: Download complete 
c8a2228805bc: Download complete 
8dbd9e392a96: Download complete 
11d214c1b26a: Download complete 
27cf78414709: Download complete 
b750fe79269d: Download complete 
cf7e766468fc: Download complete 
082189640622: Download complete 
fa822d12ee30: Download complete 
1522e919ec9f: Download complete 
fa594d99163a: Download complete 
1bd442970c79: Download complete 
0fda9de88c63: Download complete 
86e22a5fdce6: Download complete 
79d05cb13124: Download complete 
ac72e4b531bc: Download complete 
26e4b94e5a13b4bb924ef57548bb17ba03444ca003128092b5fbe344110f2e4c
$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                   NAMES
26e4b94e5a13        dhrp/sshd:latest    /usr/sbin/sshd -D      6 seconds ago       Up 3 seconds        0.0.0.0:42222->22/tcp   loving_einstein     
$ ssh root@localhost -p 42222
The authenticity of host '[localhost]:42222 ([127.0.0.1]:42222)' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:42222' (RSA) to the list of known hosts.
root@localhost's password: screencast
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.12.1-tinycore64 x86_64)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@26e4b94e5a13:~# exit
logout

بحيث يظهر ssh->المضيف المحلي 42222->منفذ VM 42222->منفذ الحاوية 22.

نصائح أخرى

قام Docker بإضافة ملف docker exec الأمر إلى Docker 1.3.0.يمكنك الاتصال بحاوية قيد التشغيل باستخدام ما يلي:

docker exec -it <container id> /bin/bash

سيؤدي ذلك إلى الاتصال بموجه bash على الحاوية قيد التشغيل.

إذا كنت تريد فقط الدخول إلى الحاوية قيد التشغيل، فقد تفكر في استخدام nsenter.فيما يلي نص باش بسيط (اقترحه كريس جونز) التي يمكنك استخدامها للدخول في حاوية عامل الإرساء.احفظه في مكان ما لديك $PATH كما عامل ميناء دخول و chmod +x

#!/bin/bash
set-e
# Check for nsenter. If not found, install it
boot2docker ssh '[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter'
# Use bash if no command is specified
args=$@
if[[ $# = 1 ]]; then
    args+=(/bin/bash)
fi

boot2docker ssh -t sudo /var/lib/boot2docker/docker-enter "${args[@]}"

ثم يمكنك الركض docker-enter 89af3d (أو أي تكوين تريد إدخاله)

متغير معدلة قليلا من إجابة Michael التي تتطلب فقط الحاوية التي تريد إدخالها اسمها (AppName):

giveacodicetagpre.

لقد اختبرت هذا لصورة Ubuntu 16.04 التي تعمل على مضيف بنفس نظام التشغيل، Docker 18.09.2، ويجب أن تعمل أيضًا مع boot2Docker مع تعديلات طفيفة.

بناء الصورة.قم بتشغيله في حاوية الخلفية (youruser قد يكون الجذر):

$ docker run -ditu <youruser> <imageId>

إرفاقها بقذيفة:

$ docker exec -it <containerId> /bin/bash

تثبيت خادم opensh (sudo مطلوب فقط إذا لم يكن المستخدم الخاص بك هو الجذر، فقد يختلف الأمر بالنسبة لـ boot2Docker):

$ sudo apt-get install -y openssh-server

شغلها:

$ sudo service ssh start

(الخطوة التالية اختيارية، إذا كان لدى المستخدم كلمة مرور، فيمكنك تخطيها وتوفير كلمة المرور عند كل اتصال ssh).

قم بإنشاء مفتاح RSA على مضيف العميل:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/youruser/.ssh/id_rsa.
Your public key has been saved in /home/youruser/.ssh/id_rsa.pub.

على صورة عامل الإرساء، قم بإنشاء دليل $HOME/.ssh:

$ cd
$ mkdir .ssh && cd .ssh
$ vi authorized_keys

انسخ وألصق محتوى $HOME/.ssh/id_rsa.pub على جهاز العميل ل authorized_keys على صورة عامل الإرساء وحفظ الملف.

(نهاية الخطوة الاختيارية).

قم بتدوين عنوان IP الخاص بصورتك:

$ cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  63448863ac39
^^^^^^^^^^ this

الآن يجب أن يكون الاتصال من مضيف العميل فعالاً:

$ ssh 172.17.0.2
Enter passphrase for key '/home/youruser/.ssh/id_rsa': 
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-46-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Fri Apr  5 09:50:30 2019 from 172.17.0.1

بالطبع يمكنك تطبيق الإجراء أعلاه بشكل غير تفاعلي في ملف Dockerfile الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top