آشنایی با WebRTC و نقش آن در آینده صنعت مخابرات و سرویس های ارتباطی

  • مــــــوضوع : آشنایی با WebRTC و نقش آن در آینده صنعت مخابرات و سرویس های ارتباطی
  • تهيه كننده : رسول ابوالحسنی یکتا

محتویات

 [نهفتن

چکیده

مقدمه

یکی از چالشهای بزرگ برای وب ، فراهم کردن راهی برای ارتباط انسان ها به وسیله صوت و تصویر بوده وهمواره ارتباط بلادرنگ کاری پیچیده و هزینه بر بوده است . دنیای امروز ما با اینترنتی عجین شده که همان اینترنت ساده‌ی ۱۰ سال پیش نیست. ارتباطاتی که در حال حاضر می‌توان از طریق اینترنت برقرار کرد، فقط ایمیل‌های ساده‌ی دیروز نیست. حتی ایمیل هم آمیخته به سرویس‌های ابری قدرتمند شده ولیکن از همه مهم‌تر ارتباطاتی است که سال‌ها پیش به پلاگین‌ها و اپلیکیشن‌های خاص نیاز داشت و مشکلات زیادی هم در راهکارهای آن روز به چشم می‌خورد. ارتباطات ویدیویی و صوتی این روزها بسیار ساده شده و WebRTC هم یکی از مقولات جدیدی است که به این سادگی و در عین حال توانمندی کمک زیادی کرده است.

WebRTC به توسعه ‌دهندگانی که به دنبال ایجاد ارتباطات آنی هستند، استفاده از تکنولوژی‌های متداول وب یعنی HTML5 ، جاوااسکریپت و CSS را پیشنهاد می‌کند. مثلاً بخش چت یک بازی مالتی‌پلیر آنلاین یا یک سایت ساده برای ویدیوکنفرانس را در نظر بگیرید، WebRTC ارتباطات آنی این اپلیکیشن‌ها را ساده می‌کند.

WebRTC واسط برنامه‌نویسی یا همان API است، اما نه به شکل یک محصول خاص یا یک واسط برنامه‌نویسی ویژه؛ در واقع WebRTC شامل گروهی از APIها برای تکمیل بخش‌های مختلف یک اپلیکیشن یا ارتباط تحت وب است و هر بخش هم به شکل‌های مختلفی در مرورگرها پشتیبانی می‌شود.

برخی از واسط‌های برنامه‌نوسی (API) در WebRTC مسئول دسترسی به وب‌کم و میکروفون یک کامپیوتر هستند و برخی دیگر وظایف محیرالعقول دیگری را انجام می‌دهند. مثلاً API خاصی برای به اشتراک‌گذاری صفحه با مخاطبین وجود دارد، منظورم از صفحه همان دستاپ یا نرم‌افزارهای اجرا شده‌ای است که روی دستاپ نمایش داده می‌شوند. حتی برای مخابره کردن ویدیو آن هم با کیفیت‌ها و بیت‌ریت‌های مختلف هم API خاصی وجود دارد. یکی دیگر از APIهای WebRTC که نام آن MediaStream API است، به توسعه‌دهنده اجازه می‌دهد که صدا را سریع پردازش کند، قطع یا متوقف کند و همین‌طور صداهای دیگری را اضافه کند.

بنابراین WebRTC یکی از کاربردی‌ترین تکنولوژی‌های وب است و توانمندی‌های بسیاری دارد؛ ویژگی مشترک کاربردهای WebRTC همان ارتباط آنی یا Realtime است.

 

بررسی ادبیات موضوع

جدول دانش

Articles_For_WebRTC_1.jpg

درخت دانش

Website_Outline1.jpg

 

بدنه تحقیق

ارتباطات چند رسانه ای تعاملی زمان واقعی از موضوعات تحقیقاتی فعال در زمینه ارتباطات راه دور در سال های اخیر بوده است. کنفرانس های راه دور به طور عمده توسط سیستم های اختصاصی و گران بر اساس دو پروتکل سیگنالینگ برجسته H.323 وSIP مورد حمایت قرار می گرفتند که SIP تطبیق پذیری بیشتری بدست آورد و از این رو تبدیل به استاندارد بالفعل برای VOIP و ویدئو کنفرانس شد . این سیستم ها معمولا نیازمند نرم افزار خاصی بودند که بایستی دانلود و نصب می شد که معمولا یک برنامه سفارشی یا یک افزونه بر روی مرورگر بود . در طول این سالها، ثابت شده است که تهدیدات امنیتی، بی ثباتی سیستم و ناسازگاری ناشی از پشتیبانی از پلاگین مرورگر ممکن است برای هر سیستم عامل متفاوت باشد. با این حال، همگرایی خدمات بسوی محیط وب در حال وقوع است.

اخیرا استانداردهایی برای ارتباطات زمان واقعی نظیر به نظیر منتشر شده است که بطور گسترده توسط مرورگرهای وب مدرن پشتیبانی می شوند بنابر این دیگر نیازی به استفاده از نرم افزارهای خاص برای برقراری ارتباطات real-time وجود ندارد .

WebRTC(Web Real-Time Communication) یک استاندارد و تلاش صنعت برای توسعه مدل مرورگر وب می باشد . برای اولین بار مرورگرها قادر به تبادل رسانه ی زمان واقعی (real-time media) بطور مستقیم با دیگر مرورگرها بصورت نظیر به نظیر (peer-to-peer) شدند .

کنسرسیوم شبکه جهانی وب (W3C) و نیروی ضربت مهندسی اینترنت (IETF) به طور مشترک ، API های جاوا اسکریپت ، استاندارد تگ های HTML5 و پروتوکل های ارتباطی زیرساختی را برای راه اندازی و مدیریت یک کانال ارتباطی قابل اعتماد بین هر جفت از مرورگرهای وب نسل بعدی تعریف کردند .

هدف این استانداردسازی معرفی یک API برای WebRTC است که برنامه تحت وب را قادر می سازد بر روی هر دستگاهی اجرا شود و دسترسی امنی به لوازم جانبی ورودی مانند وبکم و میکروفون داشته باشد تا بتواند دیتا و مدیای زمان واقعی را با یک سیستم راه دور تبادل کند .

WebRTC مجموعه ای از رابط های برنامه نویسی کاربردی جاوا اسکریپت برای استفاده از پروتکل های استاندارد در ارتباطات صوتی، تصویری و دیگر انواع داده های زمان واقعی بصورت نظیر به نظیر در مرورگرهای وب است که بطور گسترده توسط مرورگرهای وب دسکتاپ و موبایل پشتیبانی می شود و ساخت و توسعه ی خدمات ارتباطی بی درنگ بدون هیچ افزونه یا نرم افزار جانبی را امکان پذیر نموده است .

WebRTC ویژگی های از قبیل حق امتیاز کدک های رایگان، حمل و نقل داده ها به صورت امن با پروتکل امن زمان واقعی حمل و نقل (SRTP)، NAT و ... را فراهم می کند. WebRTC هیچ پروتکل سیگنالینگی را به برنامه نویس تحمیل نمی کند و برنامه نویس مختار است تا مکانیزم سیگنالینگ خود را انتخاب کند و می تواند از پروتکل های سیگنالینگ موجود برای ارتباط تلفن های قدیمی و یا سیستم های VOIP استفاده کند و بسته به توپولوژی سیگنالینگ، مدل های مختلف کنفرانس می تواند با WebRTC پیاده سازی شود.

استاندارد WebRTC در حال حاضر تحت فعالیت development.It بصورت یک تلاش مشترک از IETF RTCWeb و گروه های کاری W3C WebRTC می باشد . گروه کاری IETF RTCWeb بر روی پروتکل های اساسی تمرکز دارند و تمرکز W3C WebRTC بر روی توسعه API های جاوااسکریپ برای استفاده مرورگرهاست . Webrtc ارتباط صوتی و تصویری و داده را بین کاربران بصورت نظیر به نظیر بسیار امن تر ، سریعتر و ساده تر با امکان استفاده بر روی دستگاه های مختلف فراهم می سازد. مزایای Webrtc نسبت به تکنولوژی های قدیمی تری که امکان برقراری ارتباط صوتی و تصویری بین کاربران اینترنت را فراهم می کردند را می توان به چند عنوان اصلی تقسیم کرد :

 

1- کاربردپذیری (Useability)

در تکنولوژی های قدیمی تر برای ارتباط با درایورهای سخت افزار نیاز به نصب افزونه هایی بود که بایستی متناسب با سیستم عامل دستگاه کاربر بر روی سیستم نصب می شد تا مکان استفاده از وبکم ، میکروفن و دیگر سخت افزار ها را فراهم می کرد ، ولی در Webrtc درصورتی که مرورگر دستگاه این تکنولوژی را ساپورت کند فارق از اینکه این دستگاه یک کامپیوتر رومیزی می باشد یا یک لپ تاپ یا تبلت یا موبایل یا هر دستگاه دیگری که قابلیت اتصال به اینترنت داشته باشد و برای مشاهده وب از مرورگر استفاده کند مانند تلوزیون ، تلفن و ... نیاز به نصب هیچ افزونه ای وجود ندارد واین امر باعث خواهد شد این تکنولوژی در مبحث اینترنت اشیا بسیار پرکاربرد باشد .

2- امنیت و حریم خصوصی (security & Privacy)

در تکنولوژی های قدیمی تر مانند Silverlight برای ارتباط صوتی و تصویری میان کاربران لازم بود تا ارتباط هر یک با سرور برقرار باشد و صوت و تصویر را ابتدا برای سرور ارسال نموده و سرور اقدام به ارسال این صوت و تصویر به کاربر مقصد نمایند . به همین دلیل همواره این نگرانی وجود داشت تا شرکت ارائه دهنده خدمات از این اطلاعات استفاده های سوء نمایند و حریم خصوصی کاربران خود را نقض کند و اقدام به فروش این اطلاعات با مقاصد اقتصادی یا سیاسی نماید ولی در Webrtc ارتباط نظیر به نظیر بین مرورگرهای کاربران برقرار می شود و اطلاعات صوتی و تصویری و داده ها به هیچ وجه به سرور واسط آنها ارسال نمی گردد و این امر تضمینی برای حفظ امنیت و حریم خصوصی افراد است .

3- کاهش هزینه

شرکت هایی که خدمات ویدئو کنفرانس یا کلاس های مجازی و یا ارتباطات تصویری دوطرفه را ارائه می دهند با هزینه های فزاینده ترافیک اینترنت و پردازش بسیار بالا بر روی سرورهای خود هستند زیرا بایستی تمام فایل های صوتی و تصویری ابتدا به سرور ارسال و سپس از آنحا به کاربر مقصد ارسال شود و این امر بار پردازشی سرور و پهنای باند بسیار زیادی را به سرور تحمیل می کند . صاحبان این شرکت ها نیز برای تامین هزینه های ناشی از این سربار فزاینده به ناچار قیمت خدمات خود را افزایش می دادند . در Webrtc چون سرور فقط نقش هماهنگ کننده را بین کاربران دارد و اطلاعات به سرور ارسال نمی شود به همین دلیل سربار پردازشی و پهنای باند نخواهد داشت و هزینه های نگهداری سرور به شدت کاهش پیدا می کند .

4- افزایش کیفیت

در تلنولوژی های قدیمی تر چون ارتباط کلاینت – سروری بود و تمام اطلاعات به سرور ارسال می شد و از آنجا مجدد برای کاربر مقصد ارسال می شد ، توان پردازشی و پهنای باند سرور و همچنین میزان بار سرور در کیفیت ارتباط تاثیرگزار بود و در بهترین شرایط که میزان بار سرور کمینه بود و ازقدرت پردازشی و پهنای باند خوبی هم برخوردار بود ، به علت راسال مجدد اطلاعات و رفت و برگشت اضافی اطلاعات تاخیر بیشتری به وجود می آمد ولی در Webrtc به دلیل اینکه Connection بین مرورگرهای کاربران برقرار می گردد و اطلاعات بصورت Stream بین دو کاربر تبادل می شود کیفیت خدمات به شدت افزایش می یابد .

معماری وب

معماری کلاسیک وب Client-Server می باشد که بر اساس آن مرورگرها درخواست های HTTP خود را برای دریافت محتوا به سرور ارسال می کنند و سرور نیز به این درخواست ها پاسخ می دهد . در سناریوی برنامه های تحت وب، سرور می تواند برخی از کد جاوا اسکریپت را در صفحه HTML ی که برای کاربر می فرستد جاسازی کنید. این کدها می توانند با مرورگرها ازطریق API های استاندارد جاوا اسکریپت و با کاربران از طریق رابط کاربری تعامل کنند.

معماری WebRTC

WebRTC مدل کلاینت-سرور سنتی را با معرفی ارتباط نظیر به نظیر بین مرورگرها گسترش داده است . مدل عمومی تر معماری WebRTC که از مدل SIP(Session Initiation Protocol) الهام گرفته شده است و در شکل زیر نمایش داده شده است WebRTC Trapezoid نامیده می شود . pic1.png

در مدل WebRTC Trapezoid هر دو مرورگر یک برنامه تحت وب را اجرا می کنند که بر روی وب سرور های متفاوت قرار داده شده است . پیام های سیگنالینگ برای راه اندازی و خاتمه ارتباط استفاده می شوند . این پیام ها از طریق پروتکل HTTP یا WebSocket بین وب سرور ها منتقل می شوند که می تواند در صورت نیاز آنها را تغییر ، ترجمه و یا مدیریت کند .بایستی توجه شود که ارتباط سیگنالینگ بین مرورگر و سرور درWebRTC استاندارد نشده است و توسعه دهنده مختار است تا از پروتکل های موجود در سازمان و یا هر پروتوکل دلخواه دیگری برای برقراری این ارتباط استفاده کند . بعد از اینکه مرورگرها از طریق این پروتکل سیگنالینگ و سرورها از مشخصات و توانایی های یکدیگر اطلاع پیدا کردند ، PeerConnection به آنها این امکان را می دهد تا یک کانکشن مستقیم بین یکدیگر برای انتقال اطلاعات بدون دخالت سرورهابرقرار کنند . سرور ها برای ارتباطات سیگنالینگ می توانند از پروتکل های استاندارد سیگنالینگ مانند SIP یا Jingle استفاده کنند .

یکی دیگر از مدل های معماری رایج WebRTC این است که هر دو مرورگر برنامه تحت وب را بر روی یک سرور اجرا کنند . این مدل معماری به WebRTC Triangle معروف است و مطابق با شکل زیر می باشد . 2.png

WebRTC در مرورگرها

یک برنامه تحت وب WebRTC که ترکیبی از HTML و کدهای جاوااسکریپت می باشد ، از طریق API های استاندارد WebRTC با مرورگرها تعامل می کند و این امکان را فراهم می کند که برنامه کاربردی وب از توابع real-time مرورگر به درستی بهره برداری و استفاده نماید به عنوان مثال به وب کم یا میکروفن دسترسی داشته باشد . بنابراین API های WebRTC بایستی عملیات های وسیعی ازجمله مدیریت اتصال ، توانایی Encoding/Decoding ، کنترل استریم و ... را فراهم کند

3.png

طراحی API های WebRTC با یک مسئله چالش برانگیز مواجه است و آن این است که در این سناریو یک جریان زمان واقعی از داده ها در سراسر شبکه به منظور امکان ارتباط مستقیم بین دو مرورگر بدون واسطه ، در طول مسیر لازم است . این امر به وضوح نشان دهنده یک رویکرد انقلابی در ارتباطات مبتنی بر وب است .

فرض کنید می خواهیم یک ارتباط صوتی و تصویری آنلاین بین دو مرورگر بر قرار کنیم . در اینجا لازم است یک جریان داده مستقیم (media direct stream) بین دو مرورگر بر قرار باشد که این نیازمند یه Connection مستقیم بین دو مرورگر است . فعل و انفعالاتی که در این سناریو بایستی انجام شود توسط این عوامل انجام می گیرد : • مرورگر تماس گیرنده و نرم افزار تماس گیرنده جاوا اسکریپت (برای مثال، از طریق API جاوا اسکریپتی ذکر شده ( • نرم افزار تماس گیرنده جاوا اسکریپت و ارائه دهنده برنامه (به طور معمول، یک وب سرور) • ارائه دهنده نرم افزار و برنامه پذیرنده جاوا اسکریپت • نرم افزار جاوا اسکریپت پذیرنده و مرورگر پذیرنده (باز از طریق API جاوا اسکریپت نرم افزار مرورگر (

سیگنالینگ

ایده کلی در طراحی WebRTC این است که بطور کامل مشخص شود که چگونه قرار است ارتباط رسانه ای کنترل شود در حالیکه پلن سیگنالینگ تا آنجایی که ممکن است در لایه کاربردی رها شده است . منطق این کار این است که برنامه های کاربردی مختلف ممکن است ترجیح دهند تا از پروتکل های استاندارد سیگنالینگ مختلفی استفاده کنند مانند : SIP یا XMPP یا حتی یک پروتکل شخصی سازی شده .

توضیحات جلسه (Session description) اطلاعات بسیار مهمی را نشان می دهد که نیاز به رد و بدل شدن دارد. از جمله اطلاعات حمل و نقل (ICE) ، نوع رسانه ، فرمت و همچنین تنظیمات مورد نیاز برای ایجاد یک Connection مستقیم و انتقال یک جریان داده در بستر آن .

از آنجا که ایده اصلی برای تبادل اطلاعات توضیحات جلسه (Session description) در قالب پروتکل توصیف نشست (SDP) در حال حاضر کاستی های بسیاری دارد ،IETF در حال حاضر از استاندارد ایجاد پروتکل جلسه جاوا اسکریپت (JSEP) استفاده می کند . JSEP رابط مورد نیاز یک برنامه کاربردی برای ایجاد مذاکره بین توضیحات جلسه محلی (local Session description) و توضیحات جلسه راه دور Session description) (Remoteرا فراهم می کند .

در واقع مرورگرها برای ایجاد یک Connection مستقیم نظیر به نظیر بین خود و برقراری جریان داده در این مسیر نیاز به اطلاعاتی از توانایی ها و پروتکل های مورد پشتیبانی یکدیگر دارند که این اطلاعات تحت عنوان توضیحات جلسه (Session description) بین آنها مبادکه می شود . روند مبادله این اطلاعات بدین گونه است که ابتدا یکی از طرفین که شروع کننده ارتباط است یه Affer برای طرف مقابل می فرستد و گیرنده نیز با توجه به این Affer یک پاسخ برای طرف دیگر ارسال می کند و طی یک فرایند مذاکره بر سر پروتکل ها و استانداردهای مورد پشتیبانی طرفین به توافق می رسند و ارتباط را بر مبنای آن شکل می دهند . 4.png

برای برقراری یک ارتباط WebRTC گام های زیر بایستی برداشته شود : 1- ایجاد یک شیء های MediaStream از دستگاه های محلی خود (به عنوان مثال، میکروفون، وب کم). 2- بدست آوردن یک URL از MediaStream محلی . 3- استفاده از URL محلی برای پیش نمایش محلی . 4- ایجاد یک شی RTCPeerConnection 5- افزودن استریم محلی به Connection ایجاد شده . 6- ارسال Session description خود برای طرف مقابل به عنوان یک Affer 7- دریافت Seeeion Description طرف مقابل به عوان یک Affer 8- پردازش Session description دریافتی و افزودن remote stream به RTCPeerConnection خود . 9- بدست آوردن Url برای RemoteStream 10- استفاده از Url بدست آمده و نمایش فیلم یا صوت طرف مقابل


روش های سیگنالینگ توسط WebRTC مشخص نشده است تا از افزونگی جلوگیری شود و بیشترین انطباق را با تکنولوژی های موجود در سازمان ها داشته باشد . فرایند سیگنالیگ مربوط به پروتکل های مانند SIP (Session Initiation Protocol) ، XMPP (Extensible Messaging and Presence Protocol) ، XHR(XML HTTP Requsest) و SIP over WebSocket می باشد. 5.png

WebSocket یک افزونه جدید به مرورگرها است که در سال 2011 استاندارد شد . مهمترین مزیت WebSocket این است که هنگامیکه یک Session از جانب کلایت به سمت سرور ایجاد می کند ، تا زمانیکه Session بسته نشود آن را باز نگه می دارد . پیام ها می توانند متنی یا باینری باشند. نمودار دنباله پیام ارتباطات WebRTC جریان ارتباط بین طرفین و سرور را توصیف میکند. این نمودار در زیر نشام داده شده است . در راه کار سیگنالینگ 4 نوع پیام کنترلی ایجاد می شود : - Initialize - Initiator - got user media - peerChannel

این پیام های کنترلی متنی هستند و از آنها به منظور تنظیم Flag ها برای راه اندازی مکانیزم خاص استفاده می شود . در ابتدا Peer1 پیام initialize را به سمت سرور ارسال می کند تا به سرور اعلام کند که آغازگر جلسه است . پس از آن Peer1 رسانه های کاربر را که می تواند صوت با تصویر یا داده باشد را پس از دریافت پیام کنترلی Got user media از طرف سرور پیکربندی می کند . پس از آن peer1 در حال انتظار باقی می ماند تا Peer2 آماده شود . پس از فعال سازی Peer2 پیام سیگنالینگ معادل را ارسال می کند و وقتی متوجه می شود که آغازگر جلسه نیست ابتدا peerChannel و got user media را انجام می دهد و پس از آن هر دو طرف می توانند ارتباط Peer to Peer را برپا کنند .


پیام Affer و پاسخ آن با فرمت SDP (Session Description Protocol) ارسال می شود . SDP نقش اساسی در برپایی جلسه WebRTC ایفا می کند. SDP پروتکلی است که از طرف IETF و W3C برای تبادل اطلاعات رسانه بین طرفین انتخاب شده است. SDP اطلاعاتی مانند نوع مدیا ، فرمت ، Codec و دیگر خصوصیات مورد نیاز که برای یرپایی یک جلسه انتقال رسانه نیاز است را حمل می کند. همانطور که در دیاگرام زیر مشاهده می کنید که Peer1 یک SDP offer و یک ICE candidates به سمت سرور ارسال می کند و سرور آن را به Peer2 می فرستد . Peer2 هم یک SDP answer و یک ICE candidates را برای سرور ارسال می کند تا سرور برای Peer1 ارسال کند . پس از آن ارتباط Peer to Peer برپا می شود و از این پس طرفین می توانند بدون حضور سرور با یکدیگر تبادل پیام و صوت و تصویر داشته باشند .

6.png

تمام سیگنالینگ های SDP و پیام های کنترلی در برنامه WebRTC بصورت یک آبجکت JSON منتل می شوند . بطور خلاصه سه فاز دیاگرام بالا در شکل زیر نمایش داده شده است .

در فاز اول طرفین اقدام به تبادل پیام های کنترلی با سرور می کنند . در فاز دوم اقدام به ایجاد یک Peer Connection بر مبنای تبادل پیام از طریق SDP می کنند و در فاز سوم ارتیاط نظیر به نظیر برقرار شده و طرفین می توانند بصورت مستقیم تبادل پیام انجام دهند .

7.png

اجزای اصلی WebRTC API

اجزای اصلی WebRTC API عبارتند از :

MediaStream :

به یک مرورگر وب اجازه دسترسی به میکروفن و دوربین را می دهد . این API وظیفه کنترل جریان داده را دارد که دارای ورودی و خروجی است . منبع ورودی ممکن است یک دستگاه سخت افزاری مانند دوربین یا میکروفن باشد و خروجی ممکن است به یک یا چند مقصد مانند یک تگ ویدئو یا یک آبجکت PeerConnection ارسال شود . دو کامپوننت اصلی در MediaStream API ، MediaStream interface و MediaStreamTrack می باشد . MediaStream interface محتوای جریان داده را فراهم می کند . جریان داده می تواند قسمت های مختلفی اشته باشد ، این قسمت ها باعنوان Track شناخته می شوند که هر کدام از آنها نوع صریحی مانند Audio ، Video دارند . 8.png

MediaStreamTrack نوع داده ای را که از وردی گرفته شده است را مشخص می کند برای مثال نوع داده ورودی از میکروفن، Audio می باشد .

RTCPeerConnection :

تماس صوتی یا تصویری را برقرار می کند. این API به طرفین این امکان را می دهد تا یک ارتباط مستقیم مرورگر به مرورگر داشته باشند . WebRTC چارچوبی برای امکان برقراری ارتباط زمان واقعی فراهم می کند . معماری WebRTC سه بخش اساسی دارد . بخش اول شامل Audio ، Video و مکانیزمی برای انتقال می باشد . وضیفه اصلی مکانیزم Audio کاهش نویز و echo cancellation می باشد . مکایزم Video وظیفه بهبود تصاویر و بافر کردن ویدئو را دارد . بهبود تصاویر با استفاده از Codec VP8 انجام می گیرد .

9.png

RTCDataChannel :

به مرورگر اجازه می دهد تا داده را از کانال ارتباطی Peer to Peer ارسال کند . ین API یک ارتباط دو طرفه بین دو طرفین فراهم می کند تا بتوانند داده ی دلخواه را بین خود تبادل کنند . هر RTCDataChannel می توان برای ارئه های مختلف پیکربندی شود : - تحویل قابل اعتماد یا غیر قابل اعتماد از پیام؛ - تحویل پیام بصورت in-order یا out-of-order تحویل in-order و قابل اعتماد معادل TCP می باشد و تحویل Out-of-order و غیر قابل اعتماد معادل UDP می باشد .

Interactive Connectivity Establishment (ICE)

سیستم آدرس دهی اینترنتی که کماکان مورد استفاده قرار می گیرد IPV4 می باشد و به همین دلیل بسیاری از دستگاه هایی که به اینترنت متصل می شوند به ناچار در پشت لایه هایی از NAT قرار می گیرند . NAT مکانیزمی برای نگاشت آدرس های اینترنتی اختصاصی به آدرس های اینترنتی عمومی است و این مکانیزم می تواند توسط ISP ها یا حتی توسط یک روتر WiFi خانگی انجام پذیرد .

توسعه دهندگان تکنولوژی WebRTC می توانند با استفاده از ICE پیچیدگی های سیستم آدرس دهی اینترنتی را ساده سازی کنند ، برای این کار لازم است تا آدرس سرور ICE را به PeerConnection ارسال کنند. ICE تلاش خواهد کرد تا بهترین مسیر را برای اتصال طرفین پیدا کند . ICE از دو نوع سرور STUN (Session Traversal Utilities for NAT) و TURN (Traversal Using Relays around NAT) استفاده می کند ، از سرور STUN برای یافتن این که چه آدرس خارجی ای را به طرف مقابل اختصاص بدهد استفاده می کند و اگر این روال با مشکل مواجه شود از سرور TURN برای مسیریابی استفاده می کند .

E-learning

امروزه، با توسعه روش های نوین ارتباطی (اینترنت، تلفن همراه، و کامپیوتر) ،دانشگاه های سنتی از جمله دانشگاه آموزش الکترونیکی و مجازی با چالش های فاصله مواجه هستند ، آموزش الکترونیکی که در ابتدا توسط افراد حرفه ای که می خواستند برای تکمیل آموزش خود از این روش استفاده کنند مورد توجه قرار گرفت ، امروزه مورد توجه همگان قرار گرفته است . افراد با تجربه و مهارت کمتر در حوزه ارتباطات بایستی برای کار کردن با سیستم های آموزش الکترونیک ، دانش کافی را کسب کنند . برای آموزش مجازی سیستم های یادگیری از راه دور بسیاری وجود دارد که شامل خودارزیابی و ارزیابی آنلاین می باشند . یکی از این سیستم ها Moodle است که توسط دانشگاه های زیادی مورد استفاده قرار می گیرد . پس از معرفی WebRTC توسط گوگل که کمک شایانی در برقراری ارتباط زمان واقعی می کند انقلابی در سیستم های یادگیری آنلاین اتفاق افتاد .

یکپارچه سازی WebRTC با سیستم آموزش الکترونیکی Moddle توسط پلاگینی از WebRTC برای Moddle تست شده است ولی فقط ارتباطات پایه ای صوت و تصویر امکان پذیر است و هنوز تمام امکانات ارائه شده توسط WebRTC در آن پیاده سازی نشده است . مشکل دیگری که دانشگاه های مجازی با آن مواجه هستند ، ارزیابی دانش آموزان در دوره های زبان و STEM است . برای رفع این محدوذیت می توان از امکانات تکنولوژی جدید WebRTC استفاده کرد و قابلیت های زیر را به پلاگین Moddle اضافه کرد : - Presentation of the virtual classroom - Language oral exam - Whiteboard - Mathematical editor - File Transfert

 

Performance

تعامل مستقیم کاربران با استفاده از WebRTC ، زمان پاسخ و عملکرد آن را حیاتی کرده است . نیاز WebRTC به توان پردازشی و پهنای باند بالا ، سیستم ها بویژه دستگاه های تلفن همران با منابع محدود را به بهبود منابع فرا می خواند .

اندازه گیری از قابلیت های اساسی و پیشرفته از پیاده سازی فعلی و آینده از WebRTC به ویژه در این مرحله از استاندارد و توسعه مهم است. برای این منظور جنبه های مختلف یک سیستم WebRTC مورد ارزیابی قرار گرفته است . برای مثال در مقالات متعددی چگونگی انجام کنترل ازدحام و زمان تاخیر در توپولوژی های مختلف نشان داده شده است . مطالعه دیگری نشان می دهد ، کیفیت ویدیو در راه اندازی واقع بینانه برای دستگاه هایی که در فضای شبکه در حال حرکت هستند چگونه تغییر می کند .

نتایج یکی از آزمایش های انجام شده برای ارزیابی پارامترهای مختلف یک سیستم WebRTC بر روی گوشی Galaxy S5 به شرح زیر می باشد . - اندازه STUN BINDING REQUEST برای اتصال درخواست 154 بایت - اندازه STUN BINDING RESPONSE برای پاسخ به درخواست 106 بایت - درخواست های STUN برای هر 500ms ارسال می شد . جدول زیر تجزیه و تحلیل مربوط به استفاده از پهنای باند در هر ثانیه تنها برای پاسخ به درخواست STUN را نمایش می هد . With Bundle Without Bundle 520 bytes 1040 bytes Bandwidth Utilization این تجزیه و تحلیل با گرفتن نمونه های تصادفی از مصرف پهنای باند در طول فرآیندجلسه و با در نظر گرفتن متوسط نمونه ها انجام شده است . 10.jpg

این تجزیه و تحلیل با گرفتن نمونه های تصادفی از مصرف پهنای باند در طول فرآیندجلسه و با در نظر گرفتن متوسط نمونه ها انجام شده است . همچنین میزان استفاده از باتری برای برپایی یک جلسه صوتی و تصویری با استفاده از Bundle و بدون استفاده از آن شبیه سازی شده است . در فرایند شبیه سازی برای ارسال صوت و تصویر از بسته های RTP و RTCP بر روی یک ارتباط تکی استفاده شده است .

Battery usage without Bundle :

11.png

Battery usage with Bundl :

12.png

در نهایت WebRTC یک محیط سازگار برای تضمین استقرار جلسه صوتی و تصویری بین مرورگر های شرکت های مختلف فراهم می کند و همچنین محیطی توسعه پذیرتر و توسعه پسندتر نسبت به سیستم های پلاگین محور فراهم می کند . آزمایشات انجام شده نشان می دهد یکپارچه سازی بسته نرم افزاری در WebRTC مصرف باتری و میزان استفاده از پهنای باند را به شدت کاهش می دهد و بهره وری سیستم را بهبود می بخشد .

نتیجه گیری

نتیجه ای که در نهایت حاصل شده است.

مراجع

  • [۱] Samuel Ouya ,Khalifa Sylla,Pape Mamadou Djidiack Faye,Mouhamadou Yaya Sow and Claude Lishou. "Impact of integrating WebRTC in universities' e-learning platforms" Information and Communication Technologies (WICT) (Dec. 2015 ): 14-16
  • [۲]Branislav Sredojev ,Dragan Samardzija and Dragan Posarac. "WebRTC technology overview and signaling solution design and implementation" Information and Communication Technology, Electronics and Microelectronics (MIPRO) (May 2015 ): 25-29
  • [۳]Chuan-Yen Chiang ,Yen-Lin Chen,Pei-Shiun Tsai and Shyan-Ming Yuan. "A Video Conferencing System Based on WebRTC for Seniors" Trustworthy Systems and their Applications (TSA) (June 2014): 9-10
  • [۴] Michael Adeyeye ,Ishmeal Makitla and Thomas Fogwill. "Determining the signalling overhead of two common WebRTC methods: JSON via XMLHttpRequest and SIP over WebSocket" AFRICON (Sept. 2013): 9-12
  • [۵]Kiran Kumar Guduru and Sachin Dev. "Web RTC Implementation Analysis and Impact of Bundle Feature" Communication Systems and Network Technologies (CSNT) (April 2015): 4-6

آشنایی با WebRTC

هدف webrtc این هست که ارتباطی آسان و فراگیر بین تمام دستگاه ها از قبیل تلوزیون، رایانه، موبایل و... را فراهم کنید. Webrtc یه سری توابع استاندارد خودش را به این منظور در اختیار توسعه دهنده قرار میدهد. اکنون webrtc بروی مرورگر های Google Chrome،  Opera و  Firefox در دسترس توسعه دهندگان است و سایت های زیادی وجود دارند که با استفاده از آن امکان ارتباط های متنی، صوتی و تصویری را فراهم کرده اند.

با آمدن html5 دسترسی های بسیاز کاربردی ای به سخت افزار رایانه برای مرورگر ها فراهم شد. از قبیل دسترسی به موقعیت، کارت حافظه، وب کم و... در این مبحث ما به ارتباط مرورگر با دوربین و میکروفون کاربر (چه سیستم و چه موبایل) می پردازیم که برای آغاز به کار نیاز است که با تابع getUserMedia آشنا شویم.

 

آشنایی با getUserMedia

Webrtc امکان ضبط صوت و تصویر و ارسال ان را بر عهده دارد که تنظیمات آن تسط گروه w3c استاندارد سازی شده است. Google، Opera، Mozilla و تعدادی دیگر از شرکت ها آن را پیاده سازی کرده اند.

تابع getUserMedia قابلیت دسترسی به api های webrtc را فراهم می کند و به این صورت است که امکان استفاده از webrtc برای ارتباط با سخت افزار های صوتی و تصویری فراهم میشود.

شروع به کار

بررسی کنیم که آیا در مرورگر جاری قابلیت getUserMedia در دسترس هست یا نه:

function hasGetUserMedia() {

  return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||

            navigator.mozGetUserMedia || navigator.msGetUserMedia);

}

if (hasGetUserMedia()) {

  // Good to go!

} else {

  alert('getUserMedia() is not supported in your browser');

}

سپس نسبت به استفاده از این تابع اقدام میکنیم. نخست باید مجوز دسترسی را تعیین کنیم. یعنی مشخص کنیم که فقط تصویر ( (video: true ، فقط صوت( (audio: true و یا هر (video: true, audio: true) را میخواهیم. سپس یک تابع برای اینکه اگر مجوز داده شد اجرا شود و یک تابع برای اینکه اگر مجوز داده نشد انفاق بیفتد. هنگام اجرای تابع در مرورگر کاربر پیامی نمایش داده میشود که آیا میخواهید مجوز دسترسی بدهید یا نه؟

var errorCallback = function(e) {};
var successCallback = function(localMediaStream) {};
navigator.getUserMedia({video: true, audio: true}, successCallback, errorCallback);

حالا یک مثال تکمیل تر میزنیم که در آن یک تگ video تعیین میکنیم که در صورت در دسترس بودن تابع و در صورت مجوز دادن تگ video را به دوربین و میکروفون وصل کند و نمایش بدهد:



function hasGetUserMedia() {
return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || navigator.msGetUserMedia);
}
var errorCallback = function(e) {
console.log('Reeeejected!', e);
};
if (hasGetUserMedia()) {
// Not showing vendor prefixes.
navigator.webkitGetUserMedia({video: true, audio: true}, function(localMediaStream) {
var video = document.querySelector('video');
video.src = window.URL.createObjectURL(localMediaStream);
video.onloadedmetadata = function(e) {
// Ready to go. Do some stuff.
};
}, errorCallback);
} else {
alert('getUserMedia() is not supported in your browser');
}

این مثال فقط در مرورگر گوگل کروم قابل اجراست چون از تابع navigator.webkitGetUserMedia استفاده شده، برای اجرای این کد بروی سایر مرورگر ها میتوانید از تابع مخصوص همان مرورگر استفاده کنید: فهرست توابع برای مرورگر های گوناگون:

navigator.getUserMedia , navigator.webkitGetUserMedia , navigator.mozGetUserMedia , navigator.msGetUserMedia

اما در اینجا مشکلی وجود دارد و آن اینکه، کار مشکلی هست برای تمام مرورگر ها کد های گوناگونی بنویسیم. برای رفع این مشکل باید ابتدا مرورگر را تشخیص دهیم، تابع مخصوص آن را به عنوان تابع پیش فرض قرار دهیم:

navigator.getUserMedia  = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia;
navigator.getUserMedia(…);

بحث بعدی که باید به آن بپردازیم محدودیت طول، عرض و رزولوشن تصویر هست. برای اینکار به پارامتر اول تابع getUserMedia مراجعه میکنیم:

video: {
mandatory: {
maxWidth: 640,
maxHeight: 360
}
}

با تغییر این مشخصات ویژگی های تصویر را تغییر میدهیم.

مبحث بعدی این است که فرض کنیم دستگاه کاربر شامل چند منبع صوتی و تصویری باشد و ما بخواهیم یکی از آنها را انتخاب کنیم. برای اینکار ابتدا فهرست منابع را با استفاده از تابع MediaStreamTrack.getSources() بدست می آوریم و سپس با مقداردهی پارامتر اول تابع getUserMedia منبع مورد نظر را انتخاب میکنیم. در مثال زیر آخرین منابع سخت افزاری صوتی و تصویری دستگاه انتخاب میشود:

MediaStreamTrack.getSources(function(sourceInfos) {
var audioSource = null;
var videoSource = null;

for (var i = 0; i != sourceInfos.length; ++i) {
var sourceInfo = sourceInfos[i];
if (sourceInfo.kind === 'audio') {
console.log(sourceInfo.id, sourceInfo.label || 'microphone');

audioSource = sourceInfo.id;
} else if (sourceInfo.kind === 'video') {
console.log(sourceInfo.id, sourceInfo.label || 'camera');

videoSource = sourceInfo.id;
} else {
console.log('Some other kind of source: ', sourceInfo);
}
}

sourceSelected(audioSource, videoSource);
});

function sourceSelected(audioSource, videoSource) {
var constraints = {
audio: {
optional: [{sourceId: audioSource}]
},
video: {
optional: [{sourceId: videoSource}]
}
};

navigator.getUserMedia(constraints, successCallback, errorCallback);
}

فرض کنیم در صورت بروز هرگونه مشکل میخواهیم یه تصویر پیش فرض پخش کنیم، برای اینکار در متد خطا میتوانیم آدرس یک فایل تصویری را به ویژگی src تگ video بدهیم. قابلیت های گوناگون عکس گرفتن از فریم جاری ویدئو، افکت گذاری روی تصویر، ضبط صدا و... نیز در دسترس است که با یک جست و جو میتوانید نمونه کدهای آن را پیدا کنید.

ادامه دارد...

در ادامه به معرفی فریم ورک های پیشرفته در این زمینه و مفاهیم شبکه ای مفید برای ایجاد ارتباطات صوتی تصویری خواهیم پرداخت

 

https://pars-mc.com/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-webrtc-web-real-time-communications/

Unzip decompression occurs in Linux, mismatching "local" filename and continuing with "central" file

Mismatching "local" filename and continuing with "central" filename version appear in unzip decompression in Linux, which is a Chinese garbled problem. There is a Chinese-named file in the compressed file, and garbled characters appear after decompression.

Solution: Specify the uncompressed file format: unzip -qO UTF-8 front.zip, specify utf-8 format, or specify other formats, there will be no garbled characters

Golang http client handshake failure

7

 

That server only supports a few, weak ciphers:

TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39)   DH 1024 bits (p: 128, g: 1, Ys: 128)   FS   WEAK
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33)   DH 1024 bits (p: 128, g: 1, Ys: 128)   FS   WEAK
TLS_RSA_WITH_RC4_128_SHA (0x5)   WEAK

If you really must connect to that server, Go does support the last cipher in the list, but not by default. Create a client with a new tls.Config specifying the cipher you want:

t := &http.Transport{
    Proxy: http.ProxyFromEnvironment,
    Dial: (&net.Dialer{
        Timeout:   30 * time.Second,
        KeepAlive: 30 * time.Second,
    }).Dial,
    TLSHandshakeTimeout: 10 * time.Second,
    TLSClientConfig: &tls.Config{
        CipherSuites: []uint16{tls.TLS_RSA_WITH_RC4_128_SHA},
    },
}




This is cool. Could you share how did you debug this? Also, any idea why it might've worked in 1.4.2 and broke in 1.5? – Ainar-G Sep 11 '15 at 13:13

  • 2

    @Ainar-G: RC4 is has been disabled because it's very weak, and now prohibited: tools.ietf.org/html/rfc7465. – JimB Sep 11 '15 at 13:19

  • 2

    @Ainar-G: re debugging; a common cause of handshake failures is when there are no shared ciphers, so I look up what the server supports, and check those with the constants defined in crypto/tls. (I also check if the server even supports tls1.1, tls1.2, etc. Go1.5 is a little better at falling back for misbehaving servers now, so it tends to be more forgiving) – JimB Sep 11 '15 at 13:21 

  • @JimB Thank you! Exactly what is needed. How can you check the supported protocols? – Nikolay Sep 11 '15 at 13:28

  • 1

    @Nikolay: the easiest way is ssllabs.com. You can also script it with any tls client, plus some other methods mentioned here: superuser.com/questions/109213/…, – JimB Sep 11 '15 at 13:33

 

In redis, how do i remove keys?

delete keys:

redis-cli KEYS "*" | xargs redis-cli DEL

 

select and show keys

redis-cli --scan --pattern '*'

How to block an IP address with ufw on Ubuntu Linux server

ufw block specific IP address

The syntax is:
sudo ufw deny from {ip-address-here} to any
To block or deny all packets from 192.168.1.5, enter:
sudo ufw deny from 192.168.1.5 to any

Block an IP address ufw

Instead of deny rule we can reject connection from any IP as follows:
sudo ufw reject from 202.54.5.7 to any
You use reject when you want the other end (attacker) to know the port or IP is unreachable. However, we use deny for connections to attackers (hosts) you don’t want people to see at all. In other words the reject sends a reject response to the source, while the deny (DROP) target sends nothing at all.

Show firewall status including your rules

Verify newly added rules, enter:
$ sudo ufw status numbered
OR
$ sudo ufw status

Fig.01: ufw firewall status

Fig.01: ufw firewall status

ufw block specific IP and port number

The syntax is:
ufw deny from {ip-address-here} to any port {port-number-here}
To block or deny spammers IP address 202.54.1.5 to port 80, enter:
sudo ufw deny from 202.54.1.5 to any port 80
Again verify with the following command:
$ sudo ufw status numbered
Sample outputs:

Status: active
 
	 To                         Action      From
	 --                         ------      ----
[ 1] 192.168.1.10 80/tcp        ALLOW       Anywhere
[ 2] 192.168.1.10 22/tcp        ALLOW       Anywhere
[ 3] Anywhere                   DENY        192.168.1.5
[ 4] 80                         DENY IN     202.54.1.5

ufw deny specific IP, port number, and protocol

The syntax is:
sudo ufw deny proto {tcp|udp} from {ip-address-here} to any port {port-number-here}
For example block hacker IP address 202.54.1.1 to tcp port 22, enter:
$ sudo ufw deny proto tcp from 202.54.1.1 to any port 22
$ sudo ufw status numbered

ufw block subnet

The syntax is same:
$ sudo ufw deny proto tcp from sub/net to any port 22
$ sudo ufw deny proto tcp from 202.54.1.0/24 to any port 22

How do I delete blocked IP address or unblock an IP address again?

The syntax is:
$ sudo ufw status numbered
$ sudo ufw delete NUM
To delete rule number # 4, enter:
$ sudo ufw delete 4
Sample outputs:

Ad

Deleting:
 deny from 202.54.1.5 to any port 80
Proceed with operation (y|n)? y
Rule deleted

Tip: UFW NOT blocking an IP address

UFW (iptables) rules are applied in order of appearance, and the inspection ends immediately when there is a match. Therefore, for example, if a rule is allowing access to tcp port 22 (say using sudo ufw allow 22), and afterward another Rule is specified blocking an IP address (say using ufw deny proto tcp from 202.54.1.1 to any port 22), the rule to access port 22 is applied and the later rule to block the hacker IP address 202.54.1.1 is not. It is all about the order. To avoid such problem you need to edit the /etc/ufw/before.rules file and add a section to “Block an IP Address” after “# End required lines” section.
$ sudo vi /etc/ufw/before.rules
Find line that read as follows:

# End required lines

Append your rule to block spammers or hackers:

# Block spammers 
-A ufw-before-input -s 178.137.80.191 -j DROP
# Block ip/net (subnet) 
-A ufw-before-input -s 202.54.1.0/24 -j DROP

Save and close the file. Finally, reload the firewall:
$ sudo ufw reload
As noted below in the comment section, we can skip the whole process and use the following simple syntax:
$ sudo ufw insert 1 deny from {BADIPAddress-HERE}
$ sudo ufw insert 1 deny from 178.137.80.191 comment 'block spammer'
$ sudo ufw insert 1 deny from 202.54.1.0/24 comment 'Block DoS attack subnet'

Blocking multiple IP address and subnets (CIDRs) with ufw

We can use different methods to block multiple IP addresses. Let us try using bash for loop as follows to block 5 IP address:

# add subnet too #
IPS="192.168.2.50 1.2.3.4 123.1.2.3 142.1.2.3 202.54.1.5/29"
for i in $IPS
do
    sudo ufw insert 1 deny from "$i" comment "IP and subnet blocked"
done

Another option is to read all IP address from a text file. Create a new text file as follows using cat command:
cat > blocked.ip.list
Append both IPs and sub/nets:

# block list created by nixCraft
203.1.5.6
204.5.1.7
45.146.164.157
2620:149:e0:6002::1f1
185.38.40.66
185.220.101.0/24 

Run it as as follows using bash while loop:

while IFS= read -r block
do 
   sudo ufw insert 1 deny from "$block" 
done < "blocked.ip.list"

https://www.cyberciti.biz/faq/how-to-block-an-ip-address-with-ufw-on-ubuntu-linux-server/

How to Change Hostname on Ubuntu 18.04

Display the Current Hostname

To view the current hostname, enter the following command:

hostnamectl

Ubuntu 18.04 hostnamectl

As you can see in the image above, the current hostname is set to ubuntu1804.localdomain.

Change the Hostname

The following steps outline how to change the hostname in Ubuntu 18.04.

1. Change the hostname using hostnamectl.

In Ubuntu 18.04 we can change the system hostname and related settings using the command hostnamectl.

For example, to change the system static hostname to linuxize, you would use the following command:

sudo hostnamectl set-hostname linuxize

The hostnamectl command does not produce output. On success, 0 is returned, a non-zero failure code otherwise.

2. Edit the /etc/hosts file.

Open the /etc/hosts file and change the old hostname to the new one.

/etc/hosts

127.0.0.1   localhost
127.0.0.1   linuxize

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

3. Edit the cloud.cfg file.

If the cloud-init package is installed you also need to edit the cloud.cfg file. This package is usually installed by default in the images provided by the cloud providers such as AWS and it is used to handle the initialization of the cloud instances.

To check if the package is installed run the following ls command :

ls -l /etc/cloud/cloud.cfg

If you see the following output it means that the package is not installed and no further action is required.

ls: cannot access '/etc/cloud/cloud.cfg': No such file or directory

If the package is installed the output will look like the following:

-rw-r--r-- 1 root root 3169 Apr 27 09:30 /etc/cloud/cloud.cfg

In this case you’ll need to open the /etc/cloud/cloud.cfg file:

sudo vim /etc/cloud/cloud.cfg

Search for preserve_hostname and change the value from false to true:

/etc/cloud/cloud.cfg

# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true

Copy

Save the file and close your editor.

Verify the change

To verify that the hostname was successfully changed, once again use the hostnamectl command:

hostnamectl
   Static hostname: linuxize
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 6f17445f53074505a008c9abd8ed64a5
           Boot ID: 1c769ab73b924a188c5caeaf8c72e0f4
    Virtualization: kvm
  Operating System: Ubuntu 18.04 LTS
            Kernel: Linux 4.15.0-22-generic
      Architecture: x86-64

You should see your new server name printed on the console.

Enable Root Login via SSH In Ubuntu

Enable root login over SSH

  1. Login to your server as root.
  2. As the root user, edit the sshd_config file found in /etc/ssh/sshd_config:vim /etc/ssh/sshd_config(For details on working with Vim check out our article here!)
  3. Add the following line to the file, you can add it anywhere but it’s good practice to find the block about authentication and add it there.
    PermitRootLogin yes
  4. Save and exit the file.
  5. Restart the SSH server:systemctl restart sshdorservice sshd restart

And that’s it! With the new line added and the SSH server restarted, you can now connect via the root user. In this instance, you are going to be able to login as the root user utilizing either the password or an ssh key. When using SSH Keys, you can set the PermitRootLogin value to `without-password` instead of yes. To accomplish this, simply modify the following information noted in step 2 above instead:PermitRootLogin without-passwordThis process should work on almost any version of Linux server that the sshd service is installed. If you are using a cPanel server though you can easily control this setting from the WHM interface. In these cases, it’s recommended to modify this setting from your control panel interface.

Installing and Configuring Ubuntu Server 18.04 LTS

Installing and Configuring Ubuntu Server 18.04 LTS

For the purposes of this walk through, I am installing and configuring Ubuntu Server 18.04 LTS inside a vSphere 6.7 virtual machine inside my home lab cluster environment.  I accepted the defaults on creating a new virtual machine inside of vSphere, including the basic disk, memory, CPU, and other footprint.

Installing-and-Configuring-Ubuntu-Server-18.04-LTS-choosing-language Installing and Configuring Ubuntu Server 18.04 LTS

Installing and Configuring Ubuntu Server 18.04 LTS – choosing language

 

Installing-and-Configuring-Ubuntu-Server-18.04-LTS-choosing-keyboard-layout Installing and Configuring Ubuntu Server 18.04 LTS

Installing and Configuring Ubuntu Server 18.04 LTS – choosing keyboard layout

On the type of installer you can select the following:

  • Install Ubuntu
  • Install MAAS bare-metal cloud (region)
  • Install MAAS bare-metal cloud (rack)

What is MAAS? MAAS is Metal As A Service that lets you essentially treat physical servers like virtual machines in teh cloud. Rather than have to manage each server individually, MAAS allow you to manage the bare metal servers as elastic cloud-like resources. This has several advantages such as quickly provisioning and destroying instances as you would in the public cloud like AWS, GCE, and Azure.

Choosing-the-type-of-installation-when-installing-and-configuring-Ubuntu-Server-18.04-LTS Installing and Configuring Ubuntu Server 18.04 LTS

Choosing the type of installation when installing and configuring Ubuntu Server 18.04 LTS

 

Next is the network configuration.  Here you can choose the configuration of the network connection and even create network bonds.

Configuring-the-network-settings-when-installing-and-configuring-Ubuntu-Server-18.04-LTS Installing and Configuring Ubuntu Server 18.04 LTS

Configuring the network settings when installing and configuring Ubuntu Server 18.04 LTS

The proxy server address allows configuring the proxy address if your environment requires this for Internet access.

Configuring-a-proxy-server-address-when-installing-and-configuring-Ubuntu-Server-18.04-LTS Installing and Configuring Ubuntu Server 18.04 LTS

Configuring a proxy server address when installing and configuring Ubuntu Server 18.04 LTS

The default mirror addrress is displayed below and for most will work.

Choosing-the-mirror-server-address-during-the-installation-of-Ubuntu-Server-18.04-LTS Installing and Configuring Ubuntu Server 18.04 LTS

Choosing the mirror server address during the installation of Ubuntu Server 18.04 LTS

You can choose to change the partitioning mechanism and settings on the partitioning screen.

Selecting-disk-partitioning-options-during-Ubuntu-Server-18.04-LTS-installation-and-configuration Installing and Configuring Ubuntu Server 18.04 LTS

Selecting disk partitioning options during Ubuntu Server 18.04 LTS installation and configuration

Choose the disk to install Ubuntu Server 18.04 LTS.

LVM-Guided-partitioning-scheme-configuration Installing and Configuring Ubuntu Server 18.04 LTS

LVM Guided partitioning scheme configuration

Finalize the boot partition layout on the disk.

Finalizing-the-boot-partition-layout-to-write-to-disk Installing and Configuring Ubuntu Server 18.04 LTS

Finalizing the boot partition layout to write to disk

The installer will display a stern warning regarding changes being written to disk and if you are sure you want to destroy the partitions that currently exist.

Confirming-the-writing-of-the-partition-scheme-to-disk-in-Ubuntu-Server-18.04-LTS Installing and Configuring Ubuntu Server 18.04 LTS

Confirming the writing of the partition scheme to disk in Ubuntu Server 18.04 LTS

You will be prompted to setup a new user account and configure the Ubuntu Server 18.04 LTS server name.

Setting-up-user-credentials-during-installing-and-configuring-Ubuntu-Server-18.04-LTS Installing and Configuring Ubuntu Server 18.04 LTS

Setting up user credentials during installing and configuring Ubuntu Server 18.04 LTS

Additionally, there are common “snaps” that you can install during the installation process if you want to add those during the server installation.  These include docker, amazon-ssm-agent, google-cloud-sdk, doctl, etc.

Selecting-popular-SNAPS-to-install-during-Ubuntu-Server-18.04-Installation-and-Configuration Installing and Configuring Ubuntu Server 18.04 LTS

Selecting popular SNAPS to install during Ubuntu Server 18.04 Installation and Configuration

Installation of Ubuntu Server 18.04 LTS begins.

Ubuntu-Server-18.04-LTS-installation-begins Installing and Configuring Ubuntu Server 18.04 LTS

Ubuntu Server 18.04 LTS installation begins

Installation finishes and you are prompted to remove your installation media and reboot.

Rebooting-Ubuntu-Server-18.04-LTS-installation-after-it-finishes Installing and Configuring Ubuntu Server 18.04 LTS

Rebooting Ubuntu Server 18.04 LTS installation after it finishes

The server should successfully reboot to the Ubuntu 18.04 login screen.

Ubuntu-Server-18.04-LTS-installation-successfully-boots-to-login-prompt Installing and Configuring Ubuntu Server 18.04 LTS

Ubuntu Server 18.04 LTS installation successfully boots to login prompt

There are a few management and configuration tasks that I like to do right from the start such as updating the Ubuntu installation and enabling SSH connections and for me in the home lab – removing cloud-init. First to update the installation this is easily accomplished with a one liner cmd from the Ubuntu shell.

sudo apt-get update && sudo apt-get upgrade

Next, to enable SSH connections, this is a simple matter of uncommenting out the Port 22 directive in the sshd_config file found at /etc/ssh.  Simply edit it and save the file, then restart SSH:

  • service ssh restart

Editing-the-SSHD_CONFIG-file-in-Ubuntu-Server-18.04-LTS-to-enable-SSH-connections Installing and Configuring Ubuntu Server 18.04 LTS

Editing the SSHD_CONFIG file in Ubuntu Server 18.04 LTS to enable SSH connections

To remove cloud-init, I found a good blog post that steps through how to effectively remove this from Ubuntu Server 18.04.

How to Allow SSH root login on Ubuntu 18.04

Set Root Password

By default Ubuntu 18.04 Bionic Beaver installation comes with unset root password. To set root password open up terminal and execute the following linux command. When prompted enter your current user password and new root password:

$ sudo passwd
[sudo] password for linuxconfig: 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

Enable SSH root login

By default SSH root login is disabled. Any attempt to ssh as root user will result in the following error message:

$ ssh root@10.1.1.9
root@10.1.1.9's password: 
Permission denied, please try again.
root@10.1.1.9's password:

The next command will configure SSH server to allow root ssh login:

$ sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

Restart SSH server to apply changes:

$ sudo service ssh restart

SSH login as root

Your server now allows SSH login as root user. Use the password you set in the first step:

$ ssh root@10.1.1.9
root@10.1.1.9's password: 
Welcome to Ubuntu Bionic Beaver (GNU/Linux 4.13.0-25-generic x86_64)