টার্মিনালের দৈর্ঘ্য এবং প্রস্থ কীভাবে এসএসএইচ এবং টেলনেটের উপরে ফরোয়ার্ড করা হয়?


15

যখন আমি আমার টার্মিনাল এমুলেটরটির দৈর্ঘ্য এবং প্রস্থটি দেখি stty sizeতখন এটি 271 অক্ষর দীর্ঘ এবং 71 লম্বা লম্বা হয়। আমি যখন এসএসএইচ দিয়ে অন্য কোনও সার্ভারে লগইন করি এবং কার্যকর stty sizeকরি তখন এটি 271 অক্ষর দীর্ঘ এবং 71 লম্বা লম্বা। এমনকি আমি কিছু সিসকো আইওএস ডিভাইসে লগইন করতে পারি এবং টার্মিনালটি এখনও 271 অক্ষর দীর্ঘ এবং 71 লাইন লম্বা:

C1841#show terminal | i Len|Wid
Length: 71 lines, Width: 271 columns
C1841#

এখন আমি যদি স্থানীয় মেশিনে আমার টার্মিনাল এমুলেটর (জিনোম টার্মিনাল) উইন্ডোটির আকার পরিবর্তন করি তবে stty sizeদূরবর্তী সার্ভারে এবং আইওএসে "টার্মিনাল দেখান" পৃথক লাইনের দৈর্ঘ্য এবং রেখার সংখ্যা দেখায়। টার্মিনালের দৈর্ঘ্য এবং প্রস্থ কীভাবে এসএসএইচ এবং টেলনেটের উপরে ফরোয়ার্ড করা হয়?

উত্তর:


20

টেলনেট প্রোটোকল বর্ণিত বোঝায় যা RFC 854 , এর মধ্যে রয়েছে, এ-ব্যান্ড আদেশগুলি প্রেরণ করতে একটি উপায় রয়েছে IAC চরিত্র , '\255'কয়েকটি আরো বাইট করে। এই কমান্ডগুলি রিমোটটিতে একটি বাধা প্রেরণের মতো জিনিসগুলি করতে পারে তবে সাধারণত সেগুলি বিকল্পগুলি প্রেরণে ব্যবহৃত হয় ।

টার্মিনাল ধরণের বিকল্পটি প্রেরণ করে এমন কোনও এক্সচেঞ্জের বিশদ চেহারা মাইক্রোসফ্ট কিউ 231866 এ পাওয়া যাবে ।

উইন্ডোর আকার বিকল্প বর্ণনা করা হয় বোঝায় যা RFC 1073 । ক্লায়েন্ট প্রথমে একটি NAWSবিকল্প প্রেরণে তার ইচ্ছাকে প্রেরণ করে । যদি সার্ভার জবাব দেয় DO NAWS, ক্লায়েন্ট তারপরে NAWSবিকল্প ডেটা প্রেরণ করতে পারে , যা দুটি 16-বিট মান সমন্বিত।

47 সারি 80 কলামের টার্মিনালটিতে সেশন উদাহরণ:

telnet> set options
Will show option processing.
telnet> open localhost
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SENT WILL NAWS
RCVD DO NAWS
SENT IAC SB NAWS 0 80 (80) 0 47 (47)

আরএসএফ 4254 এ ssh প্রোটোকলটি বর্ণিত হয়েছে । এটি বার্তার একটি স্ট্রিম নিয়ে গঠিত। এরকম একটি বার্তা হ'ল "pty-req", যা সিউডো-টার্মিনালের জন্য অনুরোধ করে এবং এর পরামিতিতে টার্মিনালের উচ্চতা এবং প্রস্থ অন্তর্ভুক্ত থাকে।

byte      SSH_MSG_CHANNEL_REQUEST
uint32    recipient channel
string    "pty-req"
boolean   want_reply
string    TERM environment variable value (e.g., vt100)
uint32    terminal width, characters (e.g., 80)
uint32    terminal height, rows (e.g., 24)
uint32    terminal width, pixels (e.g., 640)
uint32    terminal height, pixels (e.g., 480)
string    encoded terminal modes

টেলনেট এবং এসএসএস ক্লায়েন্টরা SIGWINCHসিগন্যালটি ধরে ফেলবে , সুতরাং আপনি যদি কোনও সেশনের সময় টার্মিনাল উইন্ডোর আকার পরিবর্তন করেন তবে তারা নতুন আকারের সাথে সার্ভারে একটি উপযুক্ত বার্তা প্রেরণ করবে। উইন্ডো মাত্রা পরিবর্তন বার্তা প্রেরণ করে Ssh:

byte      SSH_MSG_CHANNEL_REQUEST
uint32    recipient channel
string    "window-change"
boolean   FALSE
uint32    terminal width, columns
uint32    terminal height, rows
uint32    terminal width, pixels
uint32    terminal height, pixels

আপনি আসলে পাঠাতে যে হেক্স মানগুলি ব্যবহার করতে পারেন তার উদাহরণ দিয়ে আপডেট করতে পারেন Window Dimension Change Message? এর উদাহরণ আমি কোথাও পাই না।
মিররফেটে

@ মিররফেটেটি সি কোডটি যে বার্তাটি পাঠায় তা হ'ল github.com/openssh/openssh-portable/blob/master/… । আমি পাঠানো কাঁচা বাইটগুলি কীভাবে দেখব তা আমি জানি না; ওপেনশ সোর্স কোডে আপনাকে কিছু লগিং যুক্ত করতে হতে পারে।
মার্ক প্লটনিক

2

আমি সন্দেহ করি যে এটি সিগন্যালের মাধ্যমে SIGWINCH--- সম্ভবত পাইপটি দিয়ে গেছে।

উইকিপিডিয়া থেকে :

SIGWINCH
    The SIGWINCH signal is sent to a process when its controlling
     terminal changes its size (a window change).

আমি যদি একটি (ইন zsh) করি:

[romano:~] 1 % TRAPWINCH() {echo hi;}

... এবং আমি টার্মিনাল আকার পরিবর্তন:

[romano:~] % stty size
35 99
[romano:~] % hi
[romano:~] % hi
[romano:~] % hi
[romano:~] % stty size
31 80

0

আরএফসি 4254 বিভাগ 6.9 বার্তার নাম "উইন্ডো-পরিবর্তন" নতুন মাত্রা সহ প্রেরণ করা হয়েছে। ক্লায়েন্টের পক্ষে এটি সত্য হতে পারে যে আসল সাইনচিনচ ধরা পড়েছে, তবে এটি আমার বিশ্বাস যে বার্তাটির মাধ্যমে প্রেরণ করা হবে। https://www.ietf.org/rfc/rfc4254.txt

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.