| kitten-ssh(1) | kitty | kitten-ssh(1) |
نام (NAME)
kitten-ssh - اتصال آسان به میزبانهای راه دور با محیط و تنظیمات شل محلی
نمای کلی (OVERVIEW)
- یکپارچهسازی خودکار شل <#shell-integration> در میزبانهای راه دور
- کلونسازی آسان پیکربندی محلی شل/ویرایشگر در میزبانهای راه دور
- استفاده مجدد خودکار از اتصالات موجود برای جلوگیری از تاخیر در برقراری اتصال
- در دسترس قرار دادن باینری kitten در میزبان راه دور در صورت نیاز
- تغییر آسان رنگهای ترمینال هنگام اتصال به میزبانهای راه دور
- هدایت خودکار سوکت کنترل از راه دور kitty به میزبانهای پیکربندیشده
افزوده شده در نسخه 0.25.0: یکپارچهسازی خودکار شل، انتقال فایل و استفاده مجدد از اتصالات
افزوده شده در نسخه 0.30.0: هدایت خودکار سوکتهای کنترل از راه دور
کیتن ssh به شما امکان میدهد به آسانی به میزبانهای راه دور وارد شوید و محیط آنجا را به صورت خودکار به گونهای آماده کنید که درست به راحتی شل محلی شما باشد. میتوانید متغیرهای محیطی را برای تنظیم در میزبان دوردست و فایلهایی را برای کپی به آنجا مشخص کنید و تجربه کاربری در سیستم راه دور را دقیقاً مشابه شل محلی خود بسازید. علاوه بر این، این ابزار به طور خودکار قابلیت Shell integration <#shell-integration> را در میزبان راه دور فعال کرده و پایگاهداده terminfo مربوط به kitty را در آنجا کپی مینماید.
کیتن ssh یک پوشش سبک بر روی برنامه خط فرمان سنتی ssh https://man.openbsd.org/ssh است و از تمام گزینهها، آرگومانها و پیکربندیهای مشابه پشتیبانی میکند. در سناریوهای استفاده تعاملی، این ابزار یک جایگزین مستقیم برای ssh است. برای امتحان کردن آن، به سادگی دستور زیر را اجرا کنید:
kitten ssh some-hostname-to-connect-to
در پایان باید به اعلان خط فرمان (شل پرامپت) در میزبان راه دور برسید، در حالی که یکپارچهسازی شل فعال است. اگر آن را پسندیدید، میتوانید یک نام مستعار (alias) در فایلهای rc شل خود تعریف کنید:
alias s="kitten ssh"
اکنون میتوانید تنها با نوشتن s hostname متصل شوید.
اگر نگاشتی در kitty.conf تعریف کنید، مانند:
map f1 new_window_with_cwd
سپس، فشردن کلید F1 پنجره جدیدی باز خواهد کرد که با استفاده از ssh kitten به صورت خودکار به همان میزبان و در همان دایرکتوری متصل شده است.
کیتن ssh را میتوان از طریق فایل ~/.config/kitty/ssh.conf پیکربندی کرد، جایی که میتوانید متغیرهای محیطی برای تنظیم در میزبان راه دور و فایلهایی برای کپی از سیستم محلی به میزبان راه دور را مشخص نمایید. بیایید یک نمونه سریع را ببینیم:
# کپی فایلها و دایرکتوریهای مورد نیاز برای آمادهسازی برخی ابزارهای رایج copy .zshrc .vimrc .vim # تنظیم متغیرهای محیطی env SOME_VAR=x # متغیر COPIED_VAR در میزبان راه دور همان مقداری را خواهد داشت که به طور محلی دارد env COPIED_VAR=_kitty_copy_env_var_ # ایجاد برخی تنظیمات اختصاصی برای هر نام میزبان hostname someserver-* copy env-files env SOMETHING=else hostname someuser@somehost copy --dest=foo/bar some-file copy --glob some/files.*
برای جزئیات کامل درباره نحو و گزینههای ssh.conf به ادامه متن مراجعه نمایید. علاوه بر این، میتوانید گزینههای پیکربندی را در خط فرمان نیز ارسال کنید:
kitten ssh --kitten interpreter=python servername
آرگومان --kitten میتواند چندین بار با دستورالعملهای ssh.conf مشخص شود. این گزینهها مقادیر نهایی مورد استفاده برای میزبان تطبیقیافته را بازنویسی میکنند، گویی به انتهای بخش منطبق با آن میزبان در ssh.conf افزوده شدهاند. این دستورالعملها تنها برای میزبانی که در این فراخوانی به آن SSH زده میشود اعمال میگردند، بنابراین هرگونه دستورالعمل hostname نادیده گرفته میشود.
هشدار:
یک مثال واقعی (A real world example)
فرض کنید مرتباً به یک سرور عملیاتی SSH میزنید و تمایل دارید شل و ویرایشگر خود را در آنجا با استفاده از تنظیمات سفارشی خود برپا کنید. با این حال، افراد دیگر نیز ممکن است به آن سرور SSH بزنند و شما نمیخواهید تنظیمات آنها را دستکاری کنید. در ادامه نحوه پیادهسازی این سناریو با استفاده از ssh kitten به همراه zsh به عنوان شل و vim به عنوان ویرایشگر آمده است:
# اعمال این تنظیمات روی سرورهای سازمان من hostname myserver-* # تنظیم zsh برای خواندن فایلهای خود از my-conf/zsh env ZDOTDIR=$HOME/my-conf/zsh copy --dest my-conf/zsh/.zshrc .zshrc copy --dest my-conf/zsh/.zshenv .zshenv # اگر از فایلهای راهانداز دیگر zsh استفاده میکنید آنها را نیز به شکل مشابه اضافه کنید # تنظیم vim برای خواندن پیکربندی خود از my-conf/vim env VIMINIT=$HOME/my-conf/vim/vimrc env VIMRUNTIME=$HOME/my-conf/vim copy --dest my-conf/vim .vim copy --dest my-conf/vim/vimrc .vimrc
نحوه کارکرد (How it works)
کیتن ssh به این شیوه کار میکند که از طریق SSH یک اسکریپت راهانداز اولیهساز POSIX sh (یا به صورت اختیاری پایتون) را در میزبان راه دور با استفاده از یک interpreter ارسال و اجرا میکند. این اسکریپت دادههای راهاندازی را از طریق دستگاه TTY میخواند که kitty آن را به عنوان یک فایل فشرده tarball کدگذاریشده با Base64 ارسال میدارد. اسکریپت آن را استخراج کرده، فایلها را در جای مناسب قرار میدهد و متغیرهای محیطی را پیش از اجرای نهایی شل ورود (login shell) با فعال بودن قابلیت یکپارچهسازی شل تنظیم میکند. دادهها توسط kitten از طریق TTY با یک گذرواژه یکبارمصرف تصادفی درخواست میشوند. kitty درخواست را خوانده و اگر گذرواژه با گذرواژهای که از قبل توسط kitten در حافظه اشتراکی میزبان محلی ذخیره شده مطابقت داشته باشد، انتقال مجاز شناخته میشود. اگر نسخه OpenSSH https://www.openssh.com محلی شما بزرگتر یا مساوی 8.4 باشد، دادهها فوراً و بدون هیچ تاخیر رفتوبرگشتی منتقل میشوند.
نکته:
نکته:
پیکربندی راهاندازی میزبان (Host bootstrap configuration)
hostname *
نام میزبانی که گزینههای زیر برای آن اعمال میشوند. یک الگوی سراسری (glob pattern) میتواند برای تطبیق با چندین میزبان استفاده شود. چندین نام میزبان را نیز میتوان با فاصله از یکدیگر مشخص کرد. نام میزبان میتواند شامل یک نام کاربری اختیاری به فرمت user@host باشد. در صورت عدم تعیین، گزینهها برای همه میزبانها اعمال میشوند تا زمانی که نخستین مشخصات نام میزبان یافت شود. توجه داشته باشید که تطبیق نام میزبان در برابر نامی انجام میشود که شما در خط فرمان برای اتصال به میزبان راه دور تعیین میکنید. اگر میخواهید همان پیکربندی پایه را برای میزبانهای مختلف لحاظ کنید، میتوانید این کار را با دستورالعمل include <#include> انجام دهید. در نسخه 0.28.0 رفتار این گزینه اندکی تغییر کرد؛ اکنون، هنگامی که به یک نام میزبان برخورد میشود تمام مقادیر پیکربندی آن به جای به ارث رسیدن از بلوک نام میزبان منطبق قبلی، روی مقادیر پیشفرض تنظیم میشوند. این امر به این معنی است که نامهای میزبان پیکربندیها را به ارث نمیبرند و در نتیجه از اثرات جانبی نامشخص جلوگیری میشود.
interpreter sh
مفسری که باید در میزبان راه دور استفاده شود. باید یا یک شل سازگار با POSIX یا یک فایل اجرایی python باشد. اگر شل پیشفرض sh در دسترس نبوده یا خراب باشد، استفاده از یک مفسر جایگزین میتواند مفید واقع شود.
remote_dir .local/share/kitty-ssh-kitten
مسیری در میزبان راه دور که فایلهای مورد نیاز برای این kitten در آن نصب میشوند. مسیرهای نسبی نسبت به $HOME حلوفصل میشوند. در مسیرهای مطلق کاراکتر / ابتدایی حذف شده و بنابراین آنها نیز نسبت به $HOME حلوفصل میگردند.
کپی فایلها و دایرکتوریها از میزبان محلی به میزبان راه دور. فایلهای مشخصشده به عنوان مسیرهای نسبی نسبت به دایرکتوری HOME فرض شده و در HOME میزبان راه دور کپی میشوند. دایرکتوریها به صورت بازگشتی کپی میگردند. اگر از مسیرهای مطلق استفاده شود، همانگونه که هستند کپی میشوند. برای مثال:
copy .vimrc .zshrc .config/some-dir
از گزینه --dest برای کپی فایل به مقصدی دیگر در میزبان راه دور استفاده کنید:
copy --dest some-other-name some-file
الگوهای گلوب را میتوان برای کپی چندین فایل با گزینه --glob مشخص نمود:
copy --glob images/*.png
فایلها را میتوان هنگام کپی با استفاده از --exclude مستثنی کرد:
copy --glob --exclude *.jpg --exclude *.bmp images/*
فایلهایی که نام راه دور آنها با الگوی استثنا مطابقت داشته باشد کپی نخواهند شد. برای جزئیات بیشتر بخش دستور copy را ببینید.
محیط شل ورود (Login shell environment)
shell_integration inherited
کنترل یکپارچهسازی شل در میزبان راه دور. برای جزئیات درباره نحوه کار این تنظیم به بخش Shell integration <#shell-integration> مراجعه کنید. مقدار ویژه inherited به معنای استفاده از تنظیمات موجود در kitty.conf است. این تنظیم برای بازنویسی یکپارچهسازی به ازای هر میزبان کاربرد دارد.
شل ورودی که باید در میزبان راه دور اجرا شود. به طور پیشفرض، از شل ورود حساب کاربری میزبان راه دور استفاده میشود.
تعیین متغیرهای محیطی که باید در میزبان راه دور تنظیم شوند. استفاده از نام به همراه علامت مساوی (مانند env VAR=) آن را روی یک رشته خالی تنظیم میکند. مشخص کردن تنها نام (مانند env VAR) متغیر را از محیط شل راه دور حذف خواهد کرد. مقدار ویژه _kitty_copy_env_var_ سبب میشود تا مقدار متغیر از محیط محلی کپی شود. تعاریف به ترتیب حروف الفبا پردازش میشوند. توجه داشته باشید که متغیرهای محیطی به صورت بازگشتی بسط داده میشوند، به عنوان مثال:
env VAR1=a
env VAR2=${HOME}/${VAR1}/b
مقدار VAR2 برابر با <path to home directory>/a/b خواهد بود.
دایرکتوری کاری در میزبان راه دور برای تغییر به آن. متغیرهای محیطی در این مقدار بسط داده میشوند. مقدار پیشفرض خالی است بنابراین تغییری صورت نمیگیرد، که معمولاً به معنای استفاده از دایرکتوری HOME است.
تعیین طرح رنگ برای استفاده هنگام اتصال به میزبان راه دور. اگر این گزینه با .conf خاتمه یابد، نام فایل پیکربندی برای بارگذاری از پوشه کانفیگ kitty فرض میشود؛ در غیر این صورت نام تم رنگی برای بارگذاری از طریق کیتن themes <> در نظر گرفته میشود. توجه داشته باشید که تنها رنگهای مربوط به متن/پسزمینه تغییر میکنند و سایر تنظیمات پیکربندی در فایلهای conf./تمها نادیده گرفته میشوند.
remote_kitty if-needed
در دسترس قرار دادن kitten در میزبان راه دور. برای اجرای کیتنهایی مانند icat <> جهت نمایش تصاویر یا کیتن انتقال فایل <> کاربرد دارد. تنها در صورتی کار میکند که میزبان راه دور دارای معماری باشد که باینریهای از پیش کامپایلشده kitten https://github.com/kovidgoyal/kitty/releases برای آن در دسترس باشند. توجه داشته باشید که kitten در واقع به میزبان راه دور کپی نمیشود، بلکه یک اسکریپت راهانداز کوچک کپی میشود که در اولین اجرای kitten در میزبان راه دور، آن را دانلود و اجرا خواهد کرد. مقدار if-needed به این معناست که kitten تنها در صورتی نصب میشود که در PATH سراسری سیستم موجود نباشد. مقدار yes به معنای نصب kitten حتی در صورت وجود آن است و نسخه نصبشده اولویت خواهد داشت. در نهایت، no به این معناست که هیچ kitten در میزبان راه دور نصب نمیشود. کیتن نصبشده را میتوان با اجرای kitten update-self در میزبان راه دور بهروزرسانی کرد.
پیکربندی SSH (Ssh configuration)
share_connections yes
درون یک نمونه واحد از kitty، تمامی اتصالات به یک سرور خاص میتوانند به اشتراک گذاشته شوند. این کار تاخیر راهاندازی برای اتصالات بعدی را کاهش میدهد و بدان معناست که نیاز است تنها یک بار گذرواژه را وارد کنید. در پسزمینه، این ویژگی از SSH ControlMasters استفاده میکند و این موارد هنگام خروج kitty به صورت خودکار پاکسازی میشوند. میتوانید میانبری برای close_shared_ssh_connections <#action-close_shared_ssh_connections> تعریف کنید تا تمام اتصالات اشتراکی فعال قطع شوند.
askpass unless-set
کنترل برنامهای که SSH برای درخواست گذرواژهها یا تایید کلیدهای میزبان و غیره استفاده میکند. پیشفرض استفاده از askpass بومی kitty است، مگر اینکه متغیر محیطی SSH_ASKPASS <#envvar-SSH_ASKPASS> تنظیم شده باشد. این گزینه را روی ssh قرار دهید تا هیچگونه مداخلهای در مکانیزم عادی ssh askpass انجام نشود، که معمولاً به معنای درخواست ssh در محیط ترمینال است. آن را روی native قرار دهید تا همیشه از پیادهسازی askpass داخلی و بومی kitty استفاده شود. توجه داشته باشید که عدم استفاده از پیادهسازی kitty askpass ممکن است سبب شود SSH پیش از برقراری اتصال نیاز به استفاده از ترمینال داشته باشد، در نتیجه kitten نمیتواند از ترمینال برای ارسال دادهها بدون یک رفتوبرگشت اضافه استفاده کند که به تاخیر اولیه اتصال میافزاید.
عدم استفاده از ssh kitten برای این میزبان. در عوض، دستوری که به عنوان نماینده (delegate) مشخص شده اجرا شود. برای مثال، استفاده از delegate ssh دستور ssh را با تمام آرگومانهای ارسالی به kitten، به جز آرگومانهای ویژه kitten، اجرا خواهد کرد. این ویژگی برای میزبانهایی که توانایی پشتیبانی از ssh kitten را ندارند بسیار مفید است.
forward_remote_control no
هدایت سوکت کنترل از راه دور kitty به میزبان راه دور. این ویژگی امکان استفاده از امکانات کنترل از راه دور kitty را از درون میزبان راه دور فراهم میآورد. هشدار: این کار به هر نرمافزاری در میزبان راه دور دسترسی کامل به رایانه محلی را میدهد، بنابراین آن را تنها برای میزبانهای مطمئن و مورد اعتماد انجام دهید. توجه داشته باشید که این ویژگی به دلیل محدودیتهای SSH با سوکتهای انتزاعی یونیکس (مانند @mykitty) کار نمیکند. این گزینه از قابلیت فوروارد سوکت SSH برای هدایت سوکتی استفاده میکند که متغیر محیطی KITTY_LISTEN_ON <#envvar-KITTY_LISTEN_ON> به آن اشاره دارد.
خودکارسازی Askpass (Askpass automation)
تعیین گذرواژهای که باید هنگام درخواست گذرواژه توسط SSH استفاده شود. قالب مقدار به صورت "backend:secret" است. در حال حاضر، تنها backend نوع "text" پشتیبانی میشود که رمز را به صورت متن ساده در فایل پیکربندی ذخیره میکند. برای مثال:
اگر پیشوند backend حذف شود، جهت سازگاری با نسخههای پیشین به عنوان "text:" تلقی میشود. مراقب باشید که ذخیره گذرواژهها به صورت متن ساده ناامن است.
تعیین کلید مخفی مشترک TOTP برای پر کردن خودکار کدهای یکبارمصرف هنگام درخواست SSH. قالب مقدار به صورت "backend:secret" است. در حال حاضر، تنها backend نوع "text" پشتیبانی میشود. برای مثال:
اگر پیشوند backend حذف شود، جهت سازگاری با نسخههای پیشین به عنوان "text:" در نظر گرفته میشود.
totp_digits 6
تعداد ارقام برای کدهای TOTP تولیدشده. مقدار پیشفرض 6 است.
totp_period 30
مدت زمان اعتبار کد TOTP بر حسب ثانیه. پیشفرض 30 است.
دستور copy (The copy command)
copy [options] file-or-dir-to-copy ...
کپی فایلها و دایرکتوریها از میزبان محلی به میزبان راه دور. فایلهای مشخصشده نسبت به دایرکتوری HOME فرض شده و در HOME میزبان راه دور کپی میشوند. دایرکتوریها به صورت بازگشتی کپی میگردند. در صورت استفاده از مسیرهای مطلق، دقیقاً به همان صورت کپی میشوند.
گزینهها (OPTIONS)
- --glob [=no]
- تفسیر آرگومانهای فایل به عنوان الگوهای گلوب (glob patterns). گلوبینگ بر پایه کاراکترهای عمومی استاندارد (wildcards) است با این تفاوت اضافه که /**/ با هر تعداد دایرکتوری مطابقت دارد. نحو دقیق را در اینجا ببینید: https://github.com/bmatcuk/doublestar#patterns.
- --dest <DEST>
- مقصد کپی در میزبان راه دور. مسیرهای نسبی نسبت به HOME در میزبان راه دور حلوفصل میشوند. هنگامی که این گزینه مشخص نشده باشد، مسیر فایل محلی به عنوان مقصد دوردست استفاده میشود (که در آن دایرکتوری HOME به طور خودکار با HOME راه دور جایگزین میگردد). توجه داشته باشید که متغیرهای محیطی و ~ بسط داده نمیشوند.
- --exclude <EXCLUDE>
- یک الگوی گلوب. فایلهایی با نامهای منطبق با این الگو از انتقال مستثنی میشوند. تنها هنگام کپی دایرکتوریها استفاده میشود. میتواند چندین بار مشخص شود؛ اگر هر یک از الگوها تطبیق یابد فایل مستثنی خواهد شد. اگر الگو شامل یک / باشد، در برابر کل مسیر و نه تنها نام فایل سنجیده میشود. در چنین الگوهایی میتوانید از /**/ برای تطبیق صفر یا چند دایرکتوری استفاده کنید. برای مثال، برای مستثنی کردن یک دایرکتوری و هر آنچه زیر آن قرار دارد از **/directory_name استفاده نمایید. برای نحوه تطبیق کاراکترهای عمومی، نحو دقیق را در https://github.com/bmatcuk/doublestar#patterns ببینید.
- --symlink-strategy <SYMLINK_STRATEGY>
- کنترل رفتار برنامه در مواجهه با پیوند نمادین (symlink). حالت پیشفرض حفظ پیوند نمادین و بازآفرینی مجدد آن در دستگاه دوردست است. تنظیم این گزینه روی resolve سبب میشود پیوند نمادین دنبال شده و هدف آن به عنوان فایل/دایرکتوری برای کپی استفاده شود. مقدار keep-path مانند resolve عمل میکند با این تفاوت که مسیر فایل راه دور به جای مسیر هدف پیوند نمادین، از مسیر خود پیوند نمادین مشتق میشود. توجه داشته باشید که این گزینه برای پیوندهای نمادینی که در طول کپی بازگشتی دایرکتوریها با آنها مواجه میشوید اعمال نمیشود، چرا که آن پیوندها همیشه حفظ میگردند. پیشفرض: preserve انتخابها: keep-path, preserve, resolve
کپی دستی فایلهای terminfo (Copying terminfo files manually)
گاهی ممکن است ssh kitten با خطا مواجه شود یا مایل به استفاده از آن نباشید. در چنین مواردی، فایلهای terminfo را میتوان به صورت دستی با دستور یکخطی زیر در سرور کپی نمود:
infocmp -a xterm-kitty | ssh myserver tic -x -o \~/.terminfo /dev/stdin
اگر پشت یک پراکسی (مانند Balabit) هستید که مانع این کار میشود، یا به macOS وصل میشوید که در آن tic از خواندن از STDIN پشتیبانی نمیکند، باید خروجی دستور اول را به یک فایل هدایت کنید، آن را به سرور منتقل کرده و tic را به صورت دستی اجرا نمایید. اگر به سروری متصل میشوید که embedded یا اندروید است و ابزار tic را ندارد، فایل terminfo محلی خود را به عنوان ~/.terminfo/x/xterm-kitty به سیستم دیگر کپی کنید.
اگر سرور از یک توزیع نسبتاً مدرن لینوکس استفاده میکند و دسترسی root به آن دارید، میتوانید بسته kitty-terminfo را به سادگی روی سرور نصب کنید تا فایلهای terminfo در دسترس قرار گیرند.
در حقیقت، راهکار صحیح برای این موضوع این است که توسعهدهندگان OpenSSH متقاعد شوند که ssh در صورت امکان هنگام اتصال به سرور این کار را به صورت خودکار انجام دهد تا تمامی ترمینالها به شکلی شفاف کار کنند.
اگر سرور از FreeBSD یا سیستم دیگری استفاده میکند که به جای terminfo به termcap متکی است، باید فایل terminfo را در رایانه محلی خود با اجرای دستور زیر تبدیل کنید (روی رایانه محلی با kitty):
infocmp -CrT0 xterm-kitty
خروجی این دستور توصیف termcap است که باید به فایل /usr/share/misc/termcap در سرور راه دور افزوده شود. سپس دستور زیر را برای اعمال تغییرات خود (روی سرور) اجرا کنید:
cap_mkdb /usr/share/misc/termcap
نویسنده (AUTHOR)
Kovid Goyal
حق نشر (COPYRIGHT)
2026, Kovid Goyal
| July 30, 2026 | 0.48.2 |