The Debugging Diaries
88 subscribers
63 photos
47 videos
33 files
73 links
گوشه‌ای برای یادداشت و ثبت مطالب مربوط به پایتون، یادگیری عمیق و هوش و هر چی که مربوط به تکنولوژی باشه.
加入频道
The Debugging Diaries
Photo
🔑 مدیریت ساده‌تر 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 سرورتون استفاده کنین.
اما دستورش چی جوریه؟
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
بعد مدت‌ها غیبت این دفعه میخوام راجع به دستورات لینوکسی بگم که خیلی به درد تحلیلگران و مهندسان داده میخوره. طبیعتا این دستورات چون با کرنل لینوکس کار می‌کنن و خیلی بهینه هستن، احتمالا از معادلشون تو پایتون سریع‌تر خواهند بود. بیشتر دستوراتی هم که در ادامه ذکر میشه مربوط به کار با فایل‌هاست.
از مقدماتی و ساده شروع کنیم و کم کم بریم به سمت پیشرفته‌ترش
اولیش برای باز کردن و دیدن محتویات یک فایل هست.
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
در ادامه دستورهای کاربردی لینوکس برای حوزه داده دستوری رو معرفی میکنم که تعداد بایت های فایل، تعداد کارکترها و خط‌های یک فایل رو میشماره و نشون میده (صد البته که تعداد خط‌ها فقط غالبا برا مهمه)

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 دارین دارای دو ستون (در ابتدایی ترین حالت) به شکل زیر
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