The Debugging Diaries
Photo
🔑✨ مدیریت سادهتر SSH در لینوکس
یکی از روشهای راحتتر کردن فرآیند SSH (و حذف نیاز به تایپ مداوم IP و رمز) شامل استفاده از نام مستعار برای سرور و تنظیم کلیدهای SSH است.
🔹 1. ست کردن نام مستعار (Alias) برای IP
به جای استفاده از IP، یک نام مستعار تعریف کنید.
⚙️ روش انجام در لینوکس:
فایل /etc/hosts را باز کنید:
در انتهای فایل یک خط بهصورت زیر اضافه کنید:
✅ مثال:
از این به بعد میتوانید به جای IP، از myserver استفاده کنید.
مثلا:
⚡ کاربرد در ویندوز:
برای ویندوز نیز فایل hosts موجود است:
مسیر:
ساختار فایل مشابه لینوکس است و میتوانید نام مستعار را اضافه کنید.
🔹 2. حذف نیاز به رمز با SSH Keys
به جای تایپ مکرر رمز عبور، میتوانید از کلیدهای SSH استفاده کنید.
⚙️ روش تنظیم در لینوکس:
ساخت جفت کلید SSH:
(کلیدها در مسیر ~/.ssh ذخیره میشوند. بهصورت پیشفرض: id_rsa و id_rsa.pub.)
کپی کلید عمومی به سرور مقصد:
(کلید عمومی در سرور در فایل ~/.ssh/authorized_keys ذخیره میشود.)
اتصال به سرور:
اکنون میتوانید بدون نیاز به رمز متصل شوید:
⚡ تنظیم در ویندوز (با PowerShell):
ابزار SSH در ویندوز 10 به بعد بهصورت پیشفرض موجود است.
ساخت کلید SSH:
کپی کلید عمومی به سرور:
(یا کلید عمومی را دستی در فایل authorized_keys اضافه کنید.)
🎯 نتیجه نهایی:
با اضافه کردن نام مستعار و تنظیم SSH Key، میتوانید با یک دستور ساده مثل زیر به سرور متصل شوید:
🔒 این روش امنتر از وارد کردن پسورد است!
#Linux
#SSH
یکی از روشهای راحتتر کردن فرآیند SSH (و حذف نیاز به تایپ مداوم IP و رمز) شامل استفاده از نام مستعار برای سرور و تنظیم کلیدهای SSH است.
🔹 1. ست کردن نام مستعار (Alias) برای IP
به جای استفاده از IP، یک نام مستعار تعریف کنید.
⚙️ روش انجام در لینوکس:
فایل /etc/hosts را باز کنید:
sudo vim /etc/hosts
در انتهای فایل یک خط بهصورت زیر اضافه کنید:
<Server_IP> <Alias_Name>
✅ مثال:
192.168.1.100 myserver
از این به بعد میتوانید به جای IP، از myserver استفاده کنید.
مثلا:
ping myserver
ssh <username>@myserver
⚡ کاربرد در ویندوز:
برای ویندوز نیز فایل hosts موجود است:
مسیر:
C:\Windows\System32\drivers\etc\hosts
ساختار فایل مشابه لینوکس است و میتوانید نام مستعار را اضافه کنید.
🔹 2. حذف نیاز به رمز با SSH Keys
به جای تایپ مکرر رمز عبور، میتوانید از کلیدهای SSH استفاده کنید.
⚙️ روش تنظیم در لینوکس:
ساخت جفت کلید SSH:
ssh-keygen -t rsa
(کلیدها در مسیر ~/.ssh ذخیره میشوند. بهصورت پیشفرض: id_rsa و id_rsa.pub.)
کپی کلید عمومی به سرور مقصد:
ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<server>
(کلید عمومی در سرور در فایل ~/.ssh/authorized_keys ذخیره میشود.)
اتصال به سرور:
اکنون میتوانید بدون نیاز به رمز متصل شوید:
ssh <username>@myserver
⚡ تنظیم در ویندوز (با PowerShell):
ابزار SSH در ویندوز 10 به بعد بهصورت پیشفرض موجود است.
ساخت کلید SSH:
ssh-keygen
کپی کلید عمومی به سرور:
ssh-copy-id -i $env:USERPROFILE\.ssh\id_rsa.pub <username>@<server>
(یا کلید عمومی را دستی در فایل authorized_keys اضافه کنید.)
🎯 نتیجه نهایی:
با اضافه کردن نام مستعار و تنظیم SSH Key، میتوانید با یک دستور ساده مثل زیر به سرور متصل شوید:
ssh <username>@<aliasName> -p<port>
🔒 این روش امنتر از وارد کردن پسورد است!
#Linux
#SSH
🔥1
The Debugging Diaries
Photo
یکی از باحال ترین کارهایی که طریق ssh قابل انجام هست، ssh تونلها هستن.
اما ssh تونل چیکار میکنه؟
این ابزار یه پورت از کامپیوتر ریموت رو مپ میکنه به کامپیوتر خودتون (و البته برعکس مپ یه پورت از کامپیوتر لوکال به سرور )و صرفا اینکار از طریق همون دستور ssh انجام میده.
برای مثال شما یه kibana روی پورت 5601 روی سرور ریموت دارین و با ssh tunnel میتونین این پورت منتقل کنین به کامپیوتر لوکال و در localhost از سرویس kibana سرورتون استفاده کنین.
اما دستورش چی جوریه؟
مثال
در این دستور شما پورت 5601 سرور ریموت رو مپ کردین به پورت 8080 کامپیوترتون و اگه در مرورگر بزنین localhost:8080 در واقع سرویس ران شده در سرور رو می تونین مشاهده کنید.
برای مپ کردن لوکال به ریموت از دستور R- استفاده میشه.
حالا قضیه زمانی جالب تر میشه که نه تنها به سرویسهایی که در اون کامپیوتر ریموت هست میتونین متصل بشین بلکه تمام سرویس هایی که در سرورهای اون شبکه هستن رو می تونین ازش بهره ببرین
برای مثال اگه ای پی سروری که بهش ریموت زدین مثلا 24/ 192.168.1.2 باشه، شما به سرویس های سرور با آی پی 192.168.1.3 هم دسترسی خواهید داشت فقط کافیه به جای 127.0.0.1 در دستور بالا که به لوکال هاست اشاره داره آی پی اون کامپیوتر رو وارد کنید
الان شما عملا انگار به kibana دسترسی دارین که حتی به اون کامپیوتر ssh هم نزدین و نمیتونین بزنین.
یسری سوییچ کاربردی هم داره که به شکل زیر هست
اینجا سوییچ N- یعنی اینکه وارد سرور ریموت از طریق ssh نشو و فقط تونل رو ایجاد کن
و سوییچ f- هم این پراسس رو در بک گراند ایجاد و ران میکنه و ترمینال شما رو اشغال نمیکنه و با بستنش هم هم فعال میمونه(اگه خواستین قطعش کنین باید پراسس رو kill کنین با استفاده از پراسس آیدی)
در ویندوز و لینوکس قابل استفاده است و اینکه با D- هم میشه پروکسی از نوع SOCKS باهاش ایجاد کرد که خارج از بحث هستش.
#linux
اما ssh تونل چیکار میکنه؟
این ابزار یه پورت از کامپیوتر ریموت رو مپ میکنه به کامپیوتر خودتون (و البته برعکس مپ یه پورت از کامپیوتر لوکال به سرور )و صرفا اینکار از طریق همون دستور ssh انجام میده.
برای مثال شما یه kibana روی پورت 5601 روی سرور ریموت دارین و با ssh tunnel میتونین این پورت منتقل کنین به کامپیوتر لوکال و در localhost از سرویس kibana سرورتون استفاده کنین.
اما دستورش چی جوریه؟
ssh -L <local_port>:<remote_host>:<remote_port> <user>@<ssh_server>
مثال
ssh -L 8080:127.0.0.1:5601 [email protected]
در این دستور شما پورت 5601 سرور ریموت رو مپ کردین به پورت 8080 کامپیوترتون و اگه در مرورگر بزنین localhost:8080 در واقع سرویس ران شده در سرور رو می تونین مشاهده کنید.
برای مپ کردن لوکال به ریموت از دستور R- استفاده میشه.
حالا قضیه زمانی جالب تر میشه که نه تنها به سرویسهایی که در اون کامپیوتر ریموت هست میتونین متصل بشین بلکه تمام سرویس هایی که در سرورهای اون شبکه هستن رو می تونین ازش بهره ببرین
برای مثال اگه ای پی سروری که بهش ریموت زدین مثلا 24/ 192.168.1.2 باشه، شما به سرویس های سرور با آی پی 192.168.1.3 هم دسترسی خواهید داشت فقط کافیه به جای 127.0.0.1 در دستور بالا که به لوکال هاست اشاره داره آی پی اون کامپیوتر رو وارد کنید
ssh -L 8080:192.168.1.3:5601 [email protected]
الان شما عملا انگار به kibana دسترسی دارین که حتی به اون کامپیوتر ssh هم نزدین و نمیتونین بزنین.
یسری سوییچ کاربردی هم داره که به شکل زیر هست
ssh -L 8080:localhost:5601 -N -f [email protected]
اینجا سوییچ N- یعنی اینکه وارد سرور ریموت از طریق ssh نشو و فقط تونل رو ایجاد کن
و سوییچ f- هم این پراسس رو در بک گراند ایجاد و ران میکنه و ترمینال شما رو اشغال نمیکنه و با بستنش هم هم فعال میمونه(اگه خواستین قطعش کنین باید پراسس رو kill کنین با استفاده از پراسس آیدی)
در ویندوز و لینوکس قابل استفاده است و اینکه با D- هم میشه پروکسی از نوع SOCKS باهاش ایجاد کرد که خارج از بحث هستش.
#linux
👍1
بعد مدتها غیبت این دفعه میخوام راجع به دستورات لینوکسی بگم که خیلی به درد تحلیلگران و مهندسان داده میخوره. طبیعتا این دستورات چون با کرنل لینوکس کار میکنن و خیلی بهینه هستن، احتمالا از معادلشون تو پایتون سریعتر خواهند بود. بیشتر دستوراتی هم که در ادامه ذکر میشه مربوط به کار با فایلهاست.
از مقدماتی و ساده شروع کنیم و کم کم بریم به سمت پیشرفتهترش
اولیش برای باز کردن و دیدن محتویات یک فایل هست.
اشکال این دستور اینکه برای فایلهایی که خیلی طولانی هستن خوب نیست، پس از یه دستور دیگه به نام less برای خوندن فایلهایی با خطوط بالا استفاده میشه.
این دستور آپشنهای خوبی هم داره
مثلا
یه توضیح کوچیک راجع به F+ اینکه اگه دارین فایلی رو میخونین و همزمان هم چیزی در فایل نوشته میشه، با این سوییچ، نوشتههای جدید رو هم نشون میده. توی حالت less با space میتونین یک صفحه یک صفحه جلو برین و با G+ میتونین از انتها فایل رو مشاهده کنین.
برای مشاهده ابتدا و انتهای یک فایل هم می تونین از دستور head و tail استفاده کنین.
به جای n- میتونین از c- برای نمایش چندین بایت اول یا آخر فایل هم استفاده کرد. یکی از کاربردیترین حالتهای برای مشاهده لاگ، دستور tail -f هست که به صورت برخط مواردی که به فایل اضافه میشه رو نشون میده.
#linux
از مقدماتی و ساده شروع کنیم و کم کم بریم به سمت پیشرفتهترش
اولیش برای باز کردن و دیدن محتویات یک فایل هست.
cat <file>
اشکال این دستور اینکه برای فایلهایی که خیلی طولانی هستن خوب نیست، پس از یه دستور دیگه به نام less برای خوندن فایلهایی با خطوط بالا استفاده میشه.
less <file>
این دستور آپشنهای خوبی هم داره
مثلا
less -N <file>
# show line number
less +F <file>
#Continuously displays new lines as they are added to the file.
یه توضیح کوچیک راجع به F+ اینکه اگه دارین فایلی رو میخونین و همزمان هم چیزی در فایل نوشته میشه، با این سوییچ، نوشتههای جدید رو هم نشون میده. توی حالت less با space میتونین یک صفحه یک صفحه جلو برین و با G+ میتونین از انتها فایل رو مشاهده کنین.
برای مشاهده ابتدا و انتهای یک فایل هم می تونین از دستور head و tail استفاده کنین.
head -n 10 <file>
# show first 10 line
tail -n 10 <file>
# show last 10 line
به جای n- میتونین از c- برای نمایش چندین بایت اول یا آخر فایل هم استفاده کرد. یکی از کاربردیترین حالتهای برای مشاهده لاگ، دستور tail -f هست که به صورت برخط مواردی که به فایل اضافه میشه رو نشون میده.
#linux
در ادامه دستورهای کاربردی لینوکس برای حوزه داده دستوری رو معرفی میکنم که تعداد بایت های فایل، تعداد کارکترها و خطهای یک فایل رو میشماره و نشون میده (صد البته که تعداد خطها فقط غالبا برا مهمه)
دستور بعدی sort هست که خیلی مفصل و کاربردیه
با این همه اما این دستور هنوز کلی آپشن داره
توی پست لینوکسی بعدی سعی میکنم یه کاربرد حرفهای از مجموعه دستوراتی که تا الان ذکر شد بهتون نشون بدم
#linux
wc <file>
#output is line counts - char counts - bytes counts
wc -l <file>
# line counts
wc -c <file>
# byte counts
wc -m <file>
# char counts
دستور بعدی sort هست که خیلی مفصل و کاربردیه
sort <file>
# show sort result in output
sort -r <file>
# sort reverse
sort -n <file>
# Use for numeric sort
sort -R <file>
# shuffle file and random sort
sort <file> -o <new-file>
# save sort result in new file
با این همه اما این دستور هنوز کلی آپشن داره
توی پست لینوکسی بعدی سعی میکنم یه کاربرد حرفهای از مجموعه دستوراتی که تا الان ذکر شد بهتون نشون بدم
#linux
خب در ادامه لینوکس برای حوزه داده، بریم برای یک مثال عملی فرض کنین یک فایل به نام word.csv دارین دارای دو ستون (در ابتدایی ترین حالت) به شکل زیر
و میخواین دو کلمهای که بیشترین تکرار رو داشته در یک فایل ذخیره کنین. خب برای این کار باید این فایل رو بر اساس ستون freq مرتب کنین. طبیعتا به سراغ دستور sort میریم اما آیا میشه یک فایل بر اساس یک ستون با این دستور مرتب کرد؟
جوابش بله است
در اینجا با استفاده از t- جدا کننده (که در فایل های csv کاما هست) مشخص شده با k- ستونهایی که میخواین مرتب سازی بر اساسش انجام بشه رو مشخص میکنیم که در اینجا از ستون 2 تا ستون 2 (به معنای انتخاب ستون دوم) که freq هست در نظر گرفته میشه.
در ادامه هم rn- به معنای مرتب سازی نزولی و در نظر گرفتن ستون به صورت عدد می باشد.
اما این کار یه ایرادی داره و اونم اینکه سطر اول که freq و header هست هم به عنوان یه خط در نظر گرفته میشه و فایل خروجیمون سرستون نخواهد داشت برای رفع این مشکل دستور رو به صورت زیر بازنویسی میکنیم.
دستور فوق در واقع به دو بخش قبل و بعد && تقسیم میشه
در قسمت اول با استفاده head -n 1 word.csv سطر اول که سرستونهای فایل هست جدا میشه (بخش اول دستور) بخش دوم که tail -n +2 word.csv به معنای خط دوم تا انتهای فایل هست(نکته مهم اینکه 2+ و 2 در دستورهای tail و head معنای متفاوت داره). با استفاده از عملگر پایپ | (وظیفه این دستور ارسال خروجی یک دستور به دستور دیگر است)خروجی این دستور به دستور sort که نوشته شد ارسال میشه. در نهایت بخش اول و دوم با استفاده از && بهم متصل می شوند. برای این که دو کلمه که بیشترین تکرار داشته باشند رو پیدا کنیم و در یک فایل ذخیره کنیم، دستور نهایی به شکل زیر است.
خروجی دستور رو با عملگر پایپ | مجددا به head ارسال میشه و برای اینکه دو کلمه برتر پیدا بشه (چون یکیش سر ستون هست) n- برابر با 3 قرار میگره با عملگر < هم خروجی دستورات رو میشه در یک فایل نوشت که اینجا در فایل output.txt نوشته شده است. در نهایت
به ظاهر شاید یخورده سخت باشه اما اگه با عملگرهای | و < که بهشون عملگرهای redirection و streaming میگن آشنا بوده باشین خیلی پیچیدگی دیگری نداره
در این مثال تقریبا از تمام مواردی که قبلا راجع بهشون صحبت کرده بودیم استفاده کردیم.
#linux
word,freq
python,10
linux,8
llm,15
java,20
و میخواین دو کلمهای که بیشترین تکرار رو داشته در یک فایل ذخیره کنین. خب برای این کار باید این فایل رو بر اساس ستون freq مرتب کنین. طبیعتا به سراغ دستور sort میریم اما آیا میشه یک فایل بر اساس یک ستون با این دستور مرتب کرد؟
جوابش بله است
sort -t',' -k2,2 -rn file.csv
در اینجا با استفاده از t- جدا کننده (که در فایل های csv کاما هست) مشخص شده با k- ستونهایی که میخواین مرتب سازی بر اساسش انجام بشه رو مشخص میکنیم که در اینجا از ستون 2 تا ستون 2 (به معنای انتخاب ستون دوم) که freq هست در نظر گرفته میشه.
در ادامه هم rn- به معنای مرتب سازی نزولی و در نظر گرفتن ستون به صورت عدد می باشد.
اما این کار یه ایرادی داره و اونم اینکه سطر اول که freq و header هست هم به عنوان یه خط در نظر گرفته میشه و فایل خروجیمون سرستون نخواهد داشت برای رفع این مشکل دستور رو به صورت زیر بازنویسی میکنیم.
head -n 1 word.csv && tail -n +2 word.csv | sort -t',' -k2,2 -rn
دستور فوق در واقع به دو بخش قبل و بعد && تقسیم میشه
در قسمت اول با استفاده head -n 1 word.csv سطر اول که سرستونهای فایل هست جدا میشه (بخش اول دستور) بخش دوم که tail -n +2 word.csv به معنای خط دوم تا انتهای فایل هست(نکته مهم اینکه 2+ و 2 در دستورهای tail و head معنای متفاوت داره). با استفاده از عملگر پایپ | (وظیفه این دستور ارسال خروجی یک دستور به دستور دیگر است)خروجی این دستور به دستور sort که نوشته شد ارسال میشه. در نهایت بخش اول و دوم با استفاده از && بهم متصل می شوند. برای این که دو کلمه که بیشترین تکرار داشته باشند رو پیدا کنیم و در یک فایل ذخیره کنیم، دستور نهایی به شکل زیر است.
(head -n 1 word.csv && tail -n +2 word.csv | sort -t',' -k2,2 -rn) | head -n 3 > output.txt
خروجی دستور رو با عملگر پایپ | مجددا به head ارسال میشه و برای اینکه دو کلمه برتر پیدا بشه (چون یکیش سر ستون هست) n- برابر با 3 قرار میگره با عملگر < هم خروجی دستورات رو میشه در یک فایل نوشت که اینجا در فایل output.txt نوشته شده است. در نهایت
cat output.txt
#output
word,freq
java,20
llm,15
به ظاهر شاید یخورده سخت باشه اما اگه با عملگرهای | و < که بهشون عملگرهای redirection و streaming میگن آشنا بوده باشین خیلی پیچیدگی دیگری نداره
در این مثال تقریبا از تمام مواردی که قبلا راجع بهشون صحبت کرده بودیم استفاده کردیم.
#linux
👍2