.nh .TH ttyd 1 "September 2016" ttyd "User Manual" .SH "نام (NAME)" .PP ttyd \- اشتراک‌گذاری ترمینال در بستر وب .SH "خلاصه دستور (SYNOPSIS)" .PP \fBttyd\fP [\fIگزینه‌ها\fR] <\fIدستور\fR> [<\fIآرگومان‌ها...\fR>] .SH "توضیحات (DESCRIPTION)" .PP \fBttyd\fP یک ابزار خط فرمانی برای به اشتراک‌گذاری ترمینال در بستر وب است که روی سیستم‌های *nix و Windows اجرا می‌شود و دارای قابلیت‌های زیر است: .RS .IP \(bu 2 توسعه‌یافته بر پایه Libwebsockets با libuv جهت سرعت و کارایی بالا .IP \(bu 2 ترمینال با امکانات کامل مبتنی بر Xterm.js با پشتیبانی از خطوط CJK (چینی، ژاپنی و کره‌ای) و روش ورودی IME .IP \(bu 2 یکپارچه‌سازی گرافیکی ZMODEM با پشتیبانی از lrzsz .IP \(bu 2 پشتیبانی از خروجی تصویر Sixel .IP \(bu 2 پشتیبانی از SSL بر پایه OpenSSL .IP \(bu 2 اجرای هر دستور دلخواه به همراه گزینه‌ها .IP \(bu 2 پشتیبانی از احراز هویت پایه‌ای (Basic Authentication) و تنظیمات سفارشی فراوان .IP \(bu 2 چندسکویی: macOS، Linux، FreeBSD/OpenBSD، OpenWrt/LEDE و Windows .RE .SH "گزینه‌ها (OPTIONS)" .PP -p, --port پورتی که به آن گوش داده می‌شود (پیش‌فرض: 7681، از \fB\fC0\fR برای پورت تصادفی استفاده کنید) .PP -i, --interface رابط شبکه‌ای که به آن متصل می‌شود (مانند: eth0)، یا مسیر سوکت دامنه یونیکس (مانند: /var/run/ttyd.sock) .PP -U, --socket-owner مالک کاربری پرونده سوکت دامنه یونیکس هنگام فعال بودن (مانند: user:group) .PP -c, --credential USER[:PASSWORD] اطلاعات اعتبارسنجی برای احراز هویت پایه‌ای (قالب: username:password) .PP -H, --auth-header نام هدر HTTP برای پروکسی احراز هویت؛ این گزینه ttyd را طوری تنظیم می‌کند که احراز هویت به یک پروکسی معکوس HTTP واگذار شود .PP -u, --uid شناسه کاربر (UID) برای اجرا .PP -g, --gid شناسه گروه (GID) برای اجرا .PP -s, --signal سیگنالی که هنگام خروج به دستور ارسال می‌شود (پیش‌فرض: 1، SIGHUP) .PP -w, --cwd دایرکتوری کاری برای برنامه فرزند .PP -a, --url-arg اجازه به کلاینت برای ارسال آرگومان‌های خط فرمان در URL (مانند: http://localhost:7681?arg=foo&arg=bar) .PP -W, --writable اجازه به کلاینت‌ها برای نوشتن روی TTY (به‌طور پیش‌فرض فقط‌خواندنی) .PP -t, --client-option ارسال گزینه به کلاینت (قالب: key=value)؛ برای افزودن گزینه‌های بیشتر تکرار کنید، برای جزئیات بخش \fBگزینه‌های کلاینت (CLIENT OPTIONS)\fP را ببینید .PP -T, --terminal-type نوع ترمینال جهت گزارش، پیش‌فرض: xterm-256color .PP -O, --check-origin عدم اجازه اتصال وب‌سوکت از مبداهای متفاوت (different origin) .PP -m, --max-clients حداکثر کلاینت‌های قابل پشتیبانی (پیش‌فرض: 0، نامحدود) .PP -o, --once پذیرش تنها یک کلاینت و خروج پس از قطع ارتباط .PP -q, --exit-no-conn خروج پس از قطع ارتباط تمامی کلاینت‌ها .PP -B, --browser باز کردن ترمینال در مرورگر پیش‌فرض سیستم .PP -I, --index مسیر پرونده سفارشی index.html .PP -b, --base-path مسیر پایه مورد انتظار برای درخواست‌های دریافتی از یک پروکسی معکوس (مانند: /mounted/here، حداکثر طول: 128) .PP -P, --ping-interval فاصله زمانی پینگ وب‌سوکت بر حسب ثانیه (پیش‌فرض: 5) .PP -6, --ipv6 فعال‌سازی پشتیبانی از IPv6 .PP -S, --ssl فعال‌سازی SSL .PP -C, --ssl-cert مسیر پرونده گواهی SSL .PP -K, --ssl-key مسیر پرونده کلید خصوصی SSL .PP -A, --ssl-ca مسیر پرونده گواهی CA برای اعتبارسنجی گواهی کلاینت در SSL .PP -d, --debug تنظیم سطح لاگ (پیش‌فرض: 7) .PP -v, --version نمایش نگارش و خروج .PP -h, --help نمایش این متن راهنما و خروج .SH "گزینه‌های کلاینت (CLIENT OPTIONS)" .PP برنامه ttyd سازوکاری برای ارسال آرگومان‌های خط فرمان سمت سرور به صفحه مرورگر دارد که \fBگزینه‌های کلاینت (client options)\fP نامیده می‌شود: .PP .RS .nf -t, --client-option ارسال گزینه به کلاینت (قالب: key=value)، تکرار برای افزودن گزینه‌های بیشتر .fi .RE .SH "کاربرد پایه (BASIC USAGE)" .RS .IP \(bu 2 \fB\fC-t rendererType=canvas\fR: استفاده از رندرکننده \fB\fCcanvas\fR برای xterm.js (پیش‌فرض: \fB\fCwebgl\fR) .IP \(bu 2 \fB\fC-t disableLeaveAlert=true\fR: غیرفعال‌سازی هشدار خروج از صفحه .IP \(bu 2 \fB\fC-t disableResizeOverlay=true\fR: غیرفعال‌سازی لایه نمایش تغییر اندازه ترمینال .IP \(bu 2 \fB\fC-t disableReconnect=true\fR: جلوگیری از اتصال مجدد ترمینال در صورت بروز خطا یا قطع ارتباط .IP \(bu 2 \fB\fC-t enableZmodem=true\fR: فعال‌سازی پشتیبانی از انتقال پرونده با پروتکل ZMODEM \[la]https://en.wikipedia.org/wiki/ZMODEM\[ra] / lrzsz \[la]https://ohse.de/uwe/software/lrzsz.html\[ra] .IP \(bu 2 \fB\fC-t enableTrzsz=true\fR: فعال‌سازی پشتیبانی از انتقال پرونده با trzsz \[la]https://trzsz.github.io\[ra] .IP \(bu 2 \fB\fC-t enableSixel=true\fR: فعال‌سازی پشتیبانی از خروجی تصویر Sixel \[la]https://en.wikipedia.org/wiki/Sixel\[ra] (نحوه استفاده در \[la]https://saitoha.github.io/libsixel\[ra]) .IP \(bu 2 \fB\fC-t titleFixed=hello\fR: تنظیم یک عنوان ثابت برای پنجره مرورگر .IP \(bu 2 \fB\fC-t fontSize=20\fR: تغییر اندازه قلم ترمینال .RE .SH "کاربرد پیشرفته (ADVANCED USAGE)" .PP می‌توانید با استفاده از گزینه کلاینت، تمامی تنظیمات xterm تعریف‌شده در ITerminalOptions را تغییر دهید: \[la]https://xtermjs.org/docs/api/terminal/interfaces/iterminaloptions\[ra]، به عنوان مثال: .RS .IP \(bu 2 \fB\fC-t cursorStyle=bar\fR: تنظیم سبک مکان‌نما به \fB\fCbar\fR .IP \(bu 2 \fB\fC-t lineHeight=1.5\fR: تنظیم ارتفاع خط (line-height) به \fB\fC1.5\fR .IP \(bu 2 \fB\fC-t 'theme={"background": "green"}'\fR: تنظیم رنگ پس‌زمینه به \fB\fCgreen\fR .RE .PP برای آزمایش گزینه‌های نمونه بالا، دستور زیر را اجرا کنید: .PP .RS .nf ttyd -t cursorStyle=bar -t lineHeight=1.5 -t 'theme={"background": "green"}' bash .fi .RE .SH "مثال‌ها (EXAMPLES)" .PP برنامه ttyd به‌طور پیش‌فرض سرور وب را روی پورت 7681 اجرا می‌کند، برای تغییر آن می‌توانید از گزینه \fB\-p\fR استفاده کنید؛ دستور مشخص‌شده به همراه آرگومان‌های آن اجرا خواهد شد. برای مثال: .PP .RS .nf ttyd -p 8080 bash -x .fi .RE .PP سپس نشانی http://localhost:8080 را در مرورگر باز کنید تا به یک پوسته bash با فعال بودن حالت اشکال‌زدایی دسترسی یابید. مثال‌های بیشتر: .RS .IP \(bu 2 اگر مایلید با حساب‌های کاربری سیستم خود از طریق مرورگر وب وارد شوید، دستور \fB\fCttyd login\fR\& را اجرا کنید. .IP \(bu 2 حتی می‌توانید دستوراتی غیر از شل (مانند vim) را اجرا کنید؛ دستور \fB\fCttyd vim\fR را امتحان کنید تا مرورگر وب ویرایشگر vim را نمایش دهد. .IP \(bu 2 اشتراک‌گذاری یک فرایند با چندین کلاینت: \fB\fCttyd tmux new -A -s ttyd vim\fR؛ سپس برای اتصال به نشست tmux از داخل ترمینال، دستور \fB\fCtmux new -A -s ttyd\fR را اجرا کنید. .RE .SH "راهنمای راه‌اندازی SSL (SSL HOW-TO)" .PP تولید CA برای SSL و گواهی‌های خودامضای سرور و کلاینت: .PP .RS .nf # CA certificate (FQDN must be different from server/client) openssl genrsa -out ca.key 2048 openssl req -new -x509 -days 365 -key ca.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA" -out ca.crt # server certificate (for multiple domains, change subjectAltName to: DNS:example.com,DNS:www.example.com) openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=localhost" -out server.csr openssl x509 -sha256 -req -extfile <(printf "subjectAltName=DNS:localhost") -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt # client certificate (the p12/pem format may be useful for some clients) openssl req -newkey rsa:2048 -nodes -keyout client.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=client" -out client.csr openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12 openssl pkcs12 -in client.p12 -out client.pem -clcerts .fi .RE .PP سپس ttyd را اجرا کنید: .PP .RS .nf ttyd --ssl --ssl-cert server.crt --ssl-key server.key --ssl-ca ca.crt bash .fi .RE .PP برای آزمایش اعتبارسنجی گواهی کلاینت می‌توانید از دستور \fBcurl\fR(1) استفاده کنید: .PP .RS .nf curl --insecure --cert client.p12[:password] -v https://localhost:7681 .fi .RE .PP اگر مایل به فعال‌سازی اعتبارسنجی گواهی کلاینت نیستید، گزینه \fB\fC--ssl-ca\fR را حذف کنید. .SH "داکر و ttyd (DOCKER AND TTYD)" .PP کانتینرهای داکر محیط‌های ایزوله‌ای هستند که امنیت بیشتری فراهم می‌کنند و برای محافظت از سیستم میزبان کاربرد دارند؛ می‌توانید از ttyd به همراه داکر به این صورت استفاده کنید: .RS .IP \(bu 2 اشتراک‌گذاری یک کانتینر واحد داکر بین چندین کلاینت: \fB\fCdocker run -it --rm -p 7681:7681 tsl0922/ttyd\fR. .IP \(bu 2 ایجاد یک کانتینر داکر تازه برای هر کلاینت: \fB\fCttyd docker run -it --rm ubuntu\fR. .RE .SH "پروکسی معکوس انجین‌اکس (NGINX REVERSE PROXY)" .PP پیکربندی نمونه برای پروکسی کردن ttyd زیر مسیر \fB\fC/ttyd\fR: .PP .RS .nf location ~ ^/ttyd(.*)$ { proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://127.0.0.1:7681/$1; } .fi .RE .SH "نویسندگان (AUTHORS)" .PP Shuanglei Tao .PP برای کسب اطلاعات بیشتر و گزارش خطاها به نشانی مراجعه کنید.