ttyd(1) User Manual ttyd(1)

ttyd - اشتراک‌گذاری ترمینال در بستر وب

ttyd [گزینه‌ها] <دستور> [<آرگومان‌ها...>]

ttyd یک ابزار خط فرمانی برای به اشتراک‌گذاری ترمینال در بستر وب است که روی سیستم‌های *nix و Windows اجرا می‌شود و دارای قابلیت‌های زیر است:

  • توسعه‌یافته بر پایه Libwebsockets با libuv جهت سرعت و کارایی بالا
  • ترمینال با امکانات کامل مبتنی بر Xterm.js با پشتیبانی از خطوط CJK (چینی، ژاپنی و کره‌ای) و روش ورودی IME
  • یکپارچه‌سازی گرافیکی ZMODEM با پشتیبانی از lrzsz
  • پشتیبانی از خروجی تصویر Sixel
  • پشتیبانی از SSL بر پایه OpenSSL
  • اجرای هر دستور دلخواه به همراه گزینه‌ها
  • پشتیبانی از احراز هویت پایه‌ای (Basic Authentication) و تنظیمات سفارشی فراوان
  • چندسکویی: macOS، Linux، FreeBSD/OpenBSD، OpenWrt/LEDE و Windows

-p, --port
پورتی که به آن گوش داده می‌شود (پیش‌فرض: 7681، از 0 برای پورت تصادفی استفاده کنید)

-i, --interface
رابط شبکه‌ای که به آن متصل می‌شود (مانند: eth0)، یا مسیر سوکت دامنه یونیکس (مانند: /var/run/ttyd.sock)

-U, --socket-owner
مالک کاربری پرونده سوکت دامنه یونیکس هنگام فعال بودن (مانند: user:group)

-c, --credential USER[:PASSWORD]
اطلاعات اعتبارسنجی برای احراز هویت پایه‌ای (قالب: username:password)

-H, --auth-header
نام هدر HTTP برای پروکسی احراز هویت؛ این گزینه ttyd را طوری تنظیم می‌کند که احراز هویت به یک پروکسی معکوس HTTP واگذار شود

-u, --uid
شناسه کاربر (UID) برای اجرا

-g, --gid
شناسه گروه (GID) برای اجرا

-s, --signal
سیگنالی که هنگام خروج به دستور ارسال می‌شود (پیش‌فرض: 1، SIGHUP)

-w, --cwd
دایرکتوری کاری برای برنامه فرزند

-a, --url-arg
اجازه به کلاینت برای ارسال آرگومان‌های خط فرمان در URL (مانند: http://localhost:7681?arg=foo&arg=bar)

-W, --writable
اجازه به کلاینت‌ها برای نوشتن روی TTY (به‌طور پیش‌فرض فقط‌خواندنی)

-t, --client-option
ارسال گزینه به کلاینت (قالب: key=value)؛ برای افزودن گزینه‌های بیشتر تکرار کنید، برای جزئیات بخش گزینه‌های کلاینت (CLIENT OPTIONS) را ببینید

-T, --terminal-type
نوع ترمینال جهت گزارش، پیش‌فرض: xterm-256color

-O, --check-origin
عدم اجازه اتصال وب‌سوکت از مبداهای متفاوت (different origin)

-m, --max-clients
حداکثر کلاینت‌های قابل پشتیبانی (پیش‌فرض: 0، نامحدود)

-o, --once
پذیرش تنها یک کلاینت و خروج پس از قطع ارتباط

-q, --exit-no-conn
خروج پس از قطع ارتباط تمامی کلاینت‌ها

-B, --browser
باز کردن ترمینال در مرورگر پیش‌فرض سیستم

-I, --index
مسیر پرونده سفارشی index.html

-b, --base-path
مسیر پایه مورد انتظار برای درخواست‌های دریافتی از یک پروکسی معکوس (مانند: /mounted/here، حداکثر طول: 128)

-P, --ping-interval
فاصله زمانی پینگ وب‌سوکت بر حسب ثانیه (پیش‌فرض: 5)

-6, --ipv6
فعال‌سازی پشتیبانی از IPv6

-S, --ssl
فعال‌سازی SSL

-C, --ssl-cert
مسیر پرونده گواهی SSL

-K, --ssl-key
مسیر پرونده کلید خصوصی SSL

-A, --ssl-ca
مسیر پرونده گواهی CA برای اعتبارسنجی گواهی کلاینت در SSL

-d, --debug
تنظیم سطح لاگ (پیش‌فرض: 7)

-v, --version
نمایش نگارش و خروج

-h, --help
نمایش این متن راهنما و خروج

برنامه ttyd سازوکاری برای ارسال آرگومان‌های خط فرمان سمت سرور به صفحه مرورگر دارد که گزینه‌های کلاینت (client options) نامیده می‌شود:

-t, --client-option     ارسال گزینه به کلاینت (قالب: key=value)، تکرار برای افزودن گزینه‌های بیشتر

  • -t rendererType=canvas: استفاده از رندرکننده canvas برای xterm.js (پیش‌فرض: webgl)
  • -t disableLeaveAlert=true: غیرفعال‌سازی هشدار خروج از صفحه
  • -t disableResizeOverlay=true: غیرفعال‌سازی لایه نمایش تغییر اندازه ترمینال
  • -t disableReconnect=true: جلوگیری از اتصال مجدد ترمینال در صورت بروز خطا یا قطع ارتباط
  • -t enableZmodem=true: فعال‌سازی پشتیبانی از انتقال پرونده با پروتکل ZMODEM ⟨https://en.wikipedia.org/wiki/ZMODEM⟩ / lrzsz ⟨https://ohse.de/uwe/software/lrzsz.html⟩
  • -t enableTrzsz=true: فعال‌سازی پشتیبانی از انتقال پرونده با trzsz ⟨https://trzsz.github.io⟩
  • -t enableSixel=true: فعال‌سازی پشتیبانی از خروجی تصویر Sixel ⟨https://en.wikipedia.org/wiki/Sixel⟩ (نحوه استفاده در ⟨https://saitoha.github.io/libsixel⟩)
  • -t titleFixed=hello: تنظیم یک عنوان ثابت برای پنجره مرورگر
  • -t fontSize=20: تغییر اندازه قلم ترمینال

می‌توانید با استفاده از گزینه کلاینت، تمامی تنظیمات xterm تعریف‌شده در ITerminalOptions را تغییر دهید: ⟨https://xtermjs.org/docs/api/terminal/interfaces/iterminaloptions⟩، به عنوان مثال:

  • -t cursorStyle=bar: تنظیم سبک مکان‌نما به bar
  • -t lineHeight=1.5: تنظیم ارتفاع خط (line-height) به 1.5
  • -t 'theme={"background": "green"}': تنظیم رنگ پس‌زمینه به green

برای آزمایش گزینه‌های نمونه بالا، دستور زیر را اجرا کنید:

ttyd -t cursorStyle=bar -t lineHeight=1.5 -t 'theme={"background": "green"}' bash

برنامه ttyd به‌طور پیش‌فرض سرور وب را روی پورت 7681 اجرا می‌کند، برای تغییر آن می‌توانید از گزینه -p استفاده کنید؛ دستور مشخص‌شده به همراه آرگومان‌های آن اجرا خواهد شد. برای مثال:

ttyd -p 8080 bash -x

سپس نشانی http://localhost:8080 را در مرورگر باز کنید تا به یک پوسته bash با فعال بودن حالت اشکال‌زدایی دسترسی یابید. مثال‌های بیشتر:

  • اگر مایلید با حساب‌های کاربری سیستم خود از طریق مرورگر وب وارد شوید، دستور ttyd login را اجرا کنید.
  • حتی می‌توانید دستوراتی غیر از شل (مانند vim) را اجرا کنید؛ دستور ttyd vim را امتحان کنید تا مرورگر وب ویرایشگر vim را نمایش دهد.
  • اشتراک‌گذاری یک فرایند با چندین کلاینت: ttyd tmux new -A -s ttyd vim؛ سپس برای اتصال به نشست tmux از داخل ترمینال، دستور tmux new -A -s ttyd را اجرا کنید.

تولید CA برای SSL و گواهی‌های خودامضای سرور و کلاینت:

# 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

سپس ttyd را اجرا کنید:

ttyd --ssl --ssl-cert server.crt --ssl-key server.key --ssl-ca ca.crt bash

برای آزمایش اعتبارسنجی گواهی کلاینت می‌توانید از دستور curl(1) استفاده کنید:

curl --insecure --cert client.p12[:password] -v https://localhost:7681

اگر مایل به فعال‌سازی اعتبارسنجی گواهی کلاینت نیستید، گزینه --ssl-ca را حذف کنید.

کانتینرهای داکر محیط‌های ایزوله‌ای هستند که امنیت بیشتری فراهم می‌کنند و برای محافظت از سیستم میزبان کاربرد دارند؛ می‌توانید از ttyd به همراه داکر به این صورت استفاده کنید:

  • اشتراک‌گذاری یک کانتینر واحد داکر بین چندین کلاینت: docker run -it --rm -p 7681:7681 tsl0922/ttyd.
  • ایجاد یک کانتینر داکر تازه برای هر کلاینت: ttyd docker run -it --rm ubuntu.

پیکربندی نمونه برای پروکسی کردن ttyd زیر مسیر /ttyd:

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;
}

Shuanglei Tao <tsl0922@gmail.com>

برای کسب اطلاعات بیشتر و گزارش خطاها به نشانی https://github.com/tsl0922/ttyd مراجعه کنید.

September 2016 ttyd