স্থানান্তরের জন্য ssh ব্যবহার করার সময় টার্মিনাল বরাদ্দগুলি ফাইলগুলি ভাঙ্গা করে


4

আমি এটি ব্যবহার sshকরে একটি রিমোট ফাইল আনার করতাম :

ssh host "cat file.tgz" | tar xf -

এটি পুরোপুরি সূক্ষ্ম কাজ করে। তবে আমি জোর করে কমান্ড নিয়ে খেলতে লক্ষ্য করেছি, পিটিআই-বরাদ্দ কমান্ডের আউটপুট পরিবর্তন করে:

ssh host -T "cat file.tgz" >first_file
ssh host -t "cat file.tgz" >second_file

এখানে প্রথম ফাইলটি ঠিক আছে তবে দ্বিতীয় ফাইলটি নষ্ট হয়ে গেছে।

কেন একটি pty বরাদ্দ আউটপুট পরিবর্তন?



ঠিক আছে, এটা বোঝা যায়। সুতরাং যদি উদাহরণস্বরূপ আমার বাইনারি ফাইলটিতে "\ n ~" অনুক্রমটি থাকে ~ মাঝখানে কোথাও, সংযোগ এবং সুতরাং স্থানান্তর কেবল সেখানেই শেষ হবে। - দয়া করে আমাকে এটি গ্রহণ করার অনুমতি দেওয়ার জন্য একটি উত্তর তৈরি করুন।
মিচাস

উত্তর:


2

এটি sshম্যানুয়াল পৃষ্ঠাটি পড়তে সহায়তা করে :

 -T      Disable pseudo-tty allocation.                                     

 -t      Force pseudo-tty allocation.  This can be used to execute arbi‐    
         trary screen-based programs on a remote machine, which can be      
         very useful, e.g. when implementing menu services.  Multiple -t    
         options force tty allocation, even if ssh has no local tty.

আপনি যখন তা জানাও বরাদ্দ একটি সিউডো-TTY , দূরবর্তী পাশ কোনো প্রক্রিয়া দেখতে পারেন সংযোগ একটি "বাস্তব" টার্মিনাল, এবং অতিরিক্ত বার্তাগুলি পাঠাবে যেহেতু সংযোগ ইন্টারঅ্যাকটিভ। আপনার শেল সূচনাতে এটি টার্মিনাল মোড সেটআপ করতে সক্ষম হয়, যা আপনি ব্যবহার করে পরিদর্শন করতে পারেন stty -a। টার্মিনাল মোডগুলি আপনার কীবোর্ড এন্ট্রি এবং হোস্টের মধ্যে এবং হোস্ট থেকে আপনার টার্মিনালে প্রেরিত পাঠ্যের মধ্যে অনুবাদ করতে ব্যবহৃত হয় :

  • শুরু না করে, সংযোগটি কোনও টার্মিনাল নয় এবং কোনও অনুবাদও করা হয় না।
  • সঙ্গে আরম্ভের, টার্মিনাল সম্পর্কে newline (অনুবাদ করবে \nঘোড়ার গাড়ি রিটার্ন এবং লাইন-ফিড (0x0d, 0x0a) এর)। এটি (বেশিরভাগ ব্যবহারকারীর জন্য) ফাঁকা জায়গায় ট্যাব অনুবাদ করবে।

বর্ণিত প্রভাবটি অনুবাদের জন্য । তা না করে, আপনার ইন্টারেক্টিভ সেশনটি স্ক্রিন জুড়ে "সিঁড়ি" ব্যবহার করবে এবং ব্যবহারের অযোগ্য হবে।

তোমার শেল অতিরিক্ত তথ্য প্রিন্ট হতে পারে, কিন্তু একটি কমান্ডের জন্য, পরামর্শ @kba দ্বারা বিভ্রান্তিকর কারণ শেল স্বাভাবিকভাবে পাঠাব না অনুরোধ জানানো , এবং যেমন SSH নিয়ন্ত্রণ ~Cউল্লিখিত প্রযোজ্য ইনপুট বদলে আউটপুট

টার্মিনালে যাওয়ার সময়, সংযোগটি বন্ধ করার সময় ssh বার্তাটিও প্রিন্ট করবে। কিন্তু এটি স্ট্যান্ডার্ড ত্রুটিতে লিখিত।


0

কেন একটি pty বরাদ্দ আউটপুট পরিবর্তন?

কারণ দূরবর্তী দিক (বরাদ্দ টার্মিনাল সহ) আপনার স্থানীয় টার্মিনালের ( মূলত C0 এবং C1 নিয়ন্ত্রণ কোড ) নিয়ন্ত্রণ অক্ষরগুলিকে "ইনজেক্ট" করবে । এবং যেহেতু আপনার স্থানীয় দিকটি টার্মিনাল নয়, তবে ফাইল, এটি কেবল তাদের সেই ফাইলে ফেলে দেয়।

আপনি কী চান তা অনুমান করার জন্য এসএসএইচ চেষ্টা করার চেষ্টা করছে (যদি স্টিডিন টিটিওয়াই না হয়, তবে আপনি যদি -ttসুইচগুলি না যুক্ত করেন তবে এটি রিমোট টিটিওয়াই বরাদ্দ দেবে না )। বিকল্পটি কোনও কারণে রয়েছে এবং আপনি যদি বাইনারি স্থানান্তর করতে চান তবে আপনি টার্মিনালগুলি আপনার ফাইলের সাথে গোলমাল করতে চান না।

আপনি কেবল ছোট ফাইলগুলি স্থানান্তর করে এবং সেগুলি হেক্সডাম্প করে এই আচরণটি দেখতে পারেন:

$ ssh -t host "cat test" > /tmp/test.t
$ ssh host "cat test" > /tmp/test
$ hexdump -C /tmp/test
00000000  0a 2a 20 46 72 69 20 46  65 62 20 31 32 20 32 30  |.* Fri Feb 12 20|
00000030  6d 3e 20 33 2e 34 2e 31  2d 31 0a 2d 20 4e 65 77  |m> 3.4.1-1.- New|

$ hexdump -C /tmp/test.t
00000000  0d 0a 2a 20 46 72 69 20  46 65 62 20 31 32 20 32  |..* Fri Feb 12 2|
00000030  6f 6d 3e 20 33 2e 34 2e  31 2d 31 0d 0a 2d 20 4e  |om> 3.4.1-1..- N|

আমার জন্য পার্থক্যটি 0d 0aপ্রতিটি নতুন লাইনের আগে কেবল দুটি বাইটে , তবে আরও বেশি হতে পারে (লিনাক্স লাইন নিউলাইন কেবলমাত্র \nতবে টার্মিনাল উভয়ই পায় \r\n)।


-1 এর জন্য ধন্যবাদ আপনি কি আমার উত্তরে যা পছন্দ করেন না তা আমাকে বলার মতো সাহসী?
জাকুজে

এটি প্রক্রিয়াটি বোঝার একটি প্রাথমিক অভাব দেখায়। আমি কেবল যে হিসাবে উদ্ধৃত করা হবে
থমাস ডিকি

@ থমাসডিকি, হ্যাঁ, আপনার প্রশ্নটি ইন্টার্নালদের সম্পর্কে আরও ভাল বোঝাচ্ছে। আমি স্বীকার করি যে ইউনিক্স / লিনাক্সের সাথে আমার 20+ বছরের অভিজ্ঞতা নেই তবে এই প্রশ্নের উত্তর দেওয়ার জন্য কেবল সাধারণ জ্ঞান প্রয়োজন। আপনার যদি আরও ভাল উত্তর থাকে এবং এখানে স্পষ্টত ভুল কিছু নেই তবে ডাউনভোট যুদ্ধের কোনও কারণ নেই।
জাকুজে

আমি আপনার উত্তরটিকে অগ্রাহ্য করেছি কারণ এটি পড়ে এটি ভুল তথ্য দিচ্ছিল, যেমন, "ইনজেকশন" শব্দটি পাঠককে যা ঘটছে তার একটি বিভ্রান্তিমূলক ধারণা দেয়। তারপরে প্রতিবিম্বের উপর আমি একটি ব্যবহারযোগ্য ব্যাখ্যা দেওয়ার জন্য একটি জবাব দেওয়ার সিদ্ধান্ত নিয়েছি। যদি যথেষ্ট পরিমাণে ব্যাখ্যা থাকে তবে আমি বিরক্ত করতাম না।
থমাস ডিকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.