কীভাবে ডকারে এসএসএইচ করবেন?


90

আমি নিম্নলিখিত পরিকাঠামো প্রবাহ তৈরি করতে চাই:

কীভাবে ডকার ব্যবহার করে এটি অর্জন করা যায়?

উত্তর:


70

প্রথমে আপনাকে যে ছবিগুলি এসএস-ইন করতে ইচ্ছুক রয়েছে সেগুলিতে আপনাকে একটি এসএসএইচ সার্ভার ইনস্টল করতে হবে। আপনি এসএসএস সার্ভার ইনস্টল করে আপনার সমস্ত ধারকের জন্য একটি বেস চিত্র ব্যবহার করতে পারেন। তারপরে আপনাকে কেবল হোস্টের পোর্টগুলিতে (আপনার চিত্রের রিমোট সার্ভার) এসএস পোর্ট (ডিফল্ট 22) ম্যাপিং করে প্রতিটি কন্টেইনার চালাতে হবে -p <hostPort>:<containerPort>। অর্থাত:

docker run -p 52022:22 container1 
docker run -p 53022:22 container2

তারপরে, 52022 এবং 53022 হোস্টের পোর্টগুলি যদি বাইরে থেকে অ্যাক্সেসযোগ্য হয় তবে আপনি হোস্টের আইপি (রিমোট সার্ভার) এর সাহায্যে পোর্টগুলি ssh এ নির্দিষ্ট করে সরাসরি পাত্রে স্যাশ করতে পারেন -p <port>। অর্থাৎ:

ssh -p 52022 myuser@RemoteServer -> এসএসএইচ থেকে ধারক 1

ssh -p 53022 myuser@RemoteServer -> এসএসএইচ থেকে ধারক 2


এবং এই বন্দরগুলি কীভাবে বহির্বিশ্বে প্রকাশ করা যায়? মানে এনগিনেক্স ব্যতীত এটির কনফিগার করার সম্ভাবনা আছে কি?
কামিল লেলোনেক

4
@ স্পিক্সি: এগুলি কেবল আপনার হোস্টের বন্দর; অন্যান্য অ্যাপ্লিকেশনগুলির মতো কেবল তাদের প্রকাশ করুন। এটি কেবল কাজ করতে পারে বা আপনার ফায়ারওয়ালে পোর্টগুলি খোলার প্রয়োজন হতে পারে।
অ্যাড্রিয়ান মৌআত

আমি তা পেয়েছি, আমি কেবল আশ্চর্য হয়েছি যে বন্দরগুলিতে ডোমেনের নাম মানচিত্রের সর্বোত্তম উপায়টি কী, তবে আমি বিশ্বাস করি যে এনজিএনএক্স হ'ল সমাধানটি আমি সহজেই প্রয়োগ করতে পারি।
কামিল লেলোনেক 25'15

ধারক 1 কী? আমি যখন "ডকার রান <নাম>" করি <<> চিত্রের নাম হিসাবে ব্যাখ্যা করা হয়, তাই ডকার রেপোসে একটি চিত্র সন্ধান করে। আমার ধারক আইডি ডকার রান নিয়ে কাজ করে না। আমি ধারক শুরু করতে "ডকার স্টার্ট <কনটেইনারআইডি>" ব্যবহার করি তবে ডকার শুরু--প্যারামিটার গ্রহণ করে না।
এমভিএমএন

4
যদি ডকার ব্যবহারকারী "রুট" হয় তবে আপনাকে ব্যবহারকারীকে "পাসডাব্লুড রুট" এর মাধ্যমে একটি পাসওয়ার্ড দিতে হবে। এছাড়াও আমি এই কাজগুলি পেয়েছি: ডকার রান-পি 52022: 22 কনটেইনার 1 সার্ভিস এসএসএস
সিএমপি

42

বিজ্ঞপ্তি : এই উত্তরটি আমার লেখা একটি সরঞ্জামের প্রচার করে।

এখানে নির্বাচিত উত্তরটি প্রতিটি ছবিতে একটি এসএসএইচ সার্ভার ইনস্টল করার পরামর্শ দেয়। ধারণামূলকভাবে এটি সঠিক পদ্ধতির নয় ( https://docs.docker.com/articles/dockerfile_best-practices/ )।

আমি একটি ধারকযুক্ত এসএসএইচ সার্ভার তৈরি করেছি যা আপনি যে কোনও চলমান ধারককে আটকে রাখতে পারেন। এইভাবে আপনি প্রতিটি ধারক দিয়ে রচনাগুলি তৈরি করতে পারেন। একমাত্র প্রয়োজন হ'ল ধারকটিতে ব্যাশ রয়েছে।

নিম্নলিখিত উদাহরণটি স্থানীয় মেশিনের 2222 পোর্টে উন্মুক্ত একটি এসএসএইচ সার্ভার শুরু করবে।

$ docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

$ ssh -p 2222 localhost

আরও পয়েন্টার এবং ডকুমেন্টেশনের জন্য দেখুন: https://github.com/jeroenpeeters/docker-ssh

এটি কেবল কন্টেইনারগুলির জন্য একটি প্রক্রিয়ার ধারণাকেই পরাভূত করে না, ডকার হাবের চিত্রগুলি ব্যবহার করার সময় এটি একটি জটিল বিষয়ও কারণ তারা প্রায়শই এসএসএইচ সার্ভার ধারণ করে না (এবং হওয়া উচিত নয়)।


6
এটি সঠিক উত্তর হওয়া উচিত। আপনি চান প্রতিটি ছবিতে এসএসএইচ সার্ভার ইনস্টল করা ডকারের শস্যের বিপরীতে যায়। কন্টেইনার প্রতি আপনার কেবল একটি পরিষেবা থাকতে হবে এবং পরিষেবা / পাত্রে থেকে অ্যাপ্লিকেশন রচনা করা উচিত।
বাব্বতা

4
@ জিরোইনপিটারগুলি আমি অন্য একটি পূর্বশর্ত হিসাবে অনুমান করি যে "ডকার সকেটটি ধারকটিতে ম্যাপ করা আছে, এটি ধারকটিকে ডকার ইঞ্জিন অ্যাক্সেস করতে দেয়।"
নাম জি ভিউ

4
উপরের কমান্ডে 'জিরোপিটার' কী? এটি কি ধারকের ব্যবহারকারীর নাম?
প্রতীক পাতিল

4
@ প্রতীকপ্যাটিল ইমেজ নামের এর অংশ। hub.docker.com/r/jeroenpeeters/docker-ssh
জেরোইন পিটারস

13

এই ফাইলগুলি সফলভাবে sshd খুলবে এবং পরিষেবা চালাবে যাতে আপনি স্থানীয়ভাবে এসএসএস করতে পারেন। (আপনি সাইবারডুক ব্যবহার করছেন আপনি না?)

ডকফেরফাইল

FROM swiftdocker/swift
MAINTAINER Nobody

RUN apt-get update && apt-get -y install openssh-server supervisor
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

EXPOSE 22
CMD ["/usr/bin/supervisord"]

তদারকি

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

শেমের মধ্যে লাফিয়ে লাফিয়ে / লাফিয়ে স্টার্ট ডেমন / চালাতে।

docker build -t swift3-ssh .  
docker run -p 2222:22 -i -t swift3-ssh
docker ps # find container id
docker exec -i -t <containerid> /bin/bash

এখানে চিত্র বর্ণনা লিখুন


4
আরে, সুন্দর উত্তর। আমার ধারকটি উঠে আসে এবং এটি আমাকে লগ ইন করতে অনুরোধ করে তবে শংসাপত্রগুলি কি "রুট" এবং "পাসওয়ার্ড"? এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে না তবে আমি আপনার সমাধানটি পছন্দ করি এবং আমি এটি ব্যবহার করতে চাই।
জাবারি ড্যাশ

নিশ্চিত নয় - আমি 22 বন্দরটি আঘাত করতে গিয়ে সমস্যায় পড়েছি - আপনি 2222 বন্দরটি ব্যবহার করার বিষয়টি নিশ্চিত করুন কারণ প্রায়শই স্থানীয় ডিভাইসে এই বন্দরের সাথে দ্বন্দ্বের জন্য জিনিস খোলা থাকতে পারে।
জোহন্ডপোপ

/ লাইন / 'ssh / sshd_config- এ এই লাইন (' PermitRootLogin ছাড়াই পাসওয়ার্ড ') ডিফল্টরূপে মন্তব্য করা হয়েছে, সুতরাং এর পরিবর্তে' s / # PermitRootLogin-পাসওয়ার্ড ছাড়াই / PermitRootLogin হ্যাঁ / 'ব্যবহার করুন। আপনাকে উবুন্টু 16.04+ এর জন্য 'পাসওয়ার্ডবিহীন' পরিবর্তে 'নিষেধ-পাসওয়ার্ড' ব্যবহার করতে হতে পারে। আগাম চেক করার জন্য আপনি নিশ্চিত পাত্রে চালিত করতে পারেন।
ইটজ্যাক

10

আমার ধারণা এটি সম্ভব। আপনাকে কেবল প্রতিটি পাত্রে একটি এসএসএইচ সার্ভার ইনস্টল করতে হবে এবং হোস্টের একটি পোর্ট প্রকাশ করতে হবে। মূল বিরক্তি হ'ল পোর্টটি ধারক করে ম্যাপিং রক্ষণ / স্মরণ করা হবে।

তবে আমাকে প্রশ্ন করতে হবে আপনি কেন এটি করতে চান। কনটেইনারগুলিতে থাকা এসএসএইচ যথেষ্ট বিরল হওয়া উচিত যা হোস্টের কাছে ছিটকে পড়ার ঝামেলা নয় তখন কনটেইনারটিতে প্রবেশের জন্য ডকার এক্সিকিউট ব্যবহার করুন।


সুতরাং আমি প্রতি প্রকল্পে আমি যেভাবে কনটেইনার তৈরি করব তাতে আমার পরিবেশকে মডেল করতে চাই। সুতরাং প্রতিটি প্রকল্পের নিজস্ব পরিবেশ, ব্যবহারকারী, ডাটাবেস, অজগর / রুবি সংস্করণ এবং আরও রয়েছে। আমি একাধিক সার্ভার তৈরি না করেই প্রকল্পগুলি বিচ্ছিন্ন করতে চাই।
কামিল লেলোনেক

4
@ স্পুইসি; ঠিক আছে. সাধারণত ডকারের ধারকগুলিতে কেবল একটি একক প্রক্রিয়া থাকে - আইডিয়োম্যাটিকভাবে আপনার কাছে মাইএসকিএল, পিএইচপি এবং অ্যাপাচি পৃথক ধারক থাকা উচিত। আমি নিশ্চিত না যে এটি আপনার জন্য কতটা ভাল কাজ করে।
অ্যাড্রিয়ান মৌআত

আমি জানি, আপনি কি আমার মামলার আরও ভাল সমাধান জানেন?
কামিল লেলোনেক 25'15

4
@ স্পিক্সি এটি অনেক কিছুর উপর নির্ভর করে। আমি প্রতিটি ধারককে একাধিক পাত্রে ভাঙ্গার পরামর্শ দেব recommend আপনার কী জন্য এসএসএস দরকার? যদি এটি কেবল রক্ষণাবেক্ষণ হয় তবে আপনি হোস্টের মধ্যে কেন ঝাঁকুনি দিতে পারবেন না তবে ডকের এক্সেক? আমি খুব ভীত একটি মন্তব্যে উত্তর দেওয়া খুব বড় প্রশ্ন।
অ্যাড্রিয়ান মৌআত

অ্যাড্রিয়ান যেমন লিখেছেন, একবার ডকার ব্যবহারের হ্যাং পেয়ে গেলে, আপনি বুঝতে পারবেন যে পাত্রে! = ভার্চুয়াল মেশিনগুলি। চলমান ধারকগুলিতে ইন্টারেক্টিভ অ্যাক্সেস পাওয়ার জন্য ভার্চুয়ালভাবে (পাং উদ্দেশ্যে) কোনও প্রয়োজন নেই।
এমজেডেলার 21

8

প্রাক-ইনস্টলযুক্ত ডকার চিত্রটি তৈরি করুন openssh-server:

ডকফেরফাইল

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

ব্যবহার করে চিত্রটি তৈরি করুন:

$ docker build -t eg_sshd .

একটি test_sshdধারক চালান :

$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 22

0.0.0.0:49154

আপনার ধারকটিতে এসএসএস করুন:

$ ssh root@192.168.1.2 -p 49154
# The password is ``screencast``.
root@f38c87f2a42d:/#

সূত্র: https://docs.docker.com/engine/example/running_ssh_service/#build-an-eg_sshd-image


এটা তোলে এর উল্লেখ মূল্য Mac OS জন্য x- যে আপনি চেষ্টা করতে পারেন ssh root@localhost -p <ssh_host_port>নির্দেশাবলী অনুসরণ করুন এখানে
ক্লডিও সান্তোসের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.