এসএসএইচ-এর ভিতরে এসএসএইচ "স্টিডিন: টিটিআইটি নয়" দিয়ে ব্যর্থ হয়


58

আমি একটিকে মেশিনের সাথে এসএসএসের সাথে সংযুক্ত করার চেষ্টা করছি এবং তারপরে এসএসএস দিয়ে অন্য দুটি মেশিনের সাথে সংযোগ স্থাপন করার চেষ্টা করছি, তবে আমি এই ত্রুটিটি পেয়েছি।

ssh user@computerone.com 'ssh otheruser@computertwo.com'

stdin: is not a tty

কেন?


1
আমি মনে করি না যে আপনার দ্বিতীয়টির কাছাকাছি এই একক উক্তিগুলি দরকার ssh!
coffeMug

উত্তর:


70

ডিফল্টরূপে, আপনি যখন ssh ব্যবহার করে দূরবর্তী মেশিনে একটি কমান্ড চালান, তখন একটি টিটিওয়াই দূরবর্তী সেশনের জন্য বরাদ্দ করা হয় না। এটি আপনাকে টিটিওয়াই কোয়ার্কের সাথে ডিল না করে বাইনারি ডেটা ইত্যাদি স্থানান্তর করতে দেয়। কমান্ডটি কার্যকর করার জন্য এটি পরিবেশ সরবরাহ করে computerone

যাইহোক, আপনি যখন রিমোট কমান্ড ছাড়াই ssh চালান, এটি একটি টিটিওয়াই বরাদ্দ দেয়, কারণ আপনি সম্ভবত শেল সেশন চালাচ্ছেন। ssh otheruser@computertwo.comকমান্ড দ্বারা এটি প্রত্যাশিত , তবে পূর্ববর্তী ব্যাখ্যাটির কারণে, command কমান্ডের জন্য কোনও টিটিওয়াই উপলব্ধ নেই।

আপনি যদি শেলটি চান computertwo, পরিবর্তে এটি ব্যবহার করুন, যা দূরবর্তী মৃত্যুর সময় TTY বরাদ্দকে বাধ্য করবে:

ssh -t user@computerone.com 'ssh otheruser@computertwo.com'

এটি সাধারণত উপযুক্ত যখন আপনি শেষ পর্যন্ত এসএস চেইনের শেষে শেল বা অন্যান্য ইন্টারেক্টিভ প্রক্রিয়া চালাচ্ছেন। আপনি যদি ডেটা ট্রান্সফার করতে যাচ্ছেন তবে এটি যোগ করাও যথাযথ নয় এবং প্রয়োজনও নয় -t, তবে প্রতিটি এসএসএস কমান্ডের মধ্যে ডেটা উত্পাদনকারী বা-কনসুমিং কমান্ড থাকবে, যেমন:

ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'

9

রিলে হিসাবে এসএসএইচ ব্যবহারের আরও ভাল উপায় আছে: ProxyCommandবিকল্পটি ব্যবহার করুন । আপনার ক্লায়েন্ট মেশিনে একটি কী থাকা দরকার যা আপনাকে দ্বিতীয় কম্পিউটারে লগ ইন করতে দেয় (পাবলিক কী হ'ল বেশিরভাগ পরিস্থিতিতে এসএসএইচ ব্যবহারের প্রস্তাবিত উপায়)। এটি আপনার রাখুন ~/.ssh/configএবং চালান ssh computertwo

Host computerone
HostName computerone.com
UserName user

Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p

ncহয় netcat । বিভিন্ন সংস্করণ উপলব্ধ যে কোনও করতে হবে।


আমাদের কম্পিউটারোননে 'অনুমোদিত' কিক্সের জন্য "প্রক্সি" সম্পর্কিত লাইন যুক্ত করার দরকার নেই? আমি ওপেনএসএসএইচ এর 'প্রক্সি' শক্তিটি অনুসন্ধান করার অর্থ রাখি, তবে এখনও এটি সন্ধান করতে পারিনি।
ফিলিপ আলভারেজ

7

এটি মধ্যবর্তী সার্ভারে একটি টিটিআই ডিভাইসে একটি ইন্টারেক্টিভ টার্মিনাল আশা করে।

আপনি যদি এই আদেশটি চেষ্টা করেন তবে এটি কার্যকর করা উচিত:

ssh user@computer1 -t "ssh otheruser@computer2"

দেখুন man sshজন্য -tবিকল্প।


2

আমি like / .ssh / config এ অবস্থিত আমার ssh কনফিগারেশন ফাইলটিতে অনুরোধটি হ্যাঁ যুক্ত করে এটি সমাধান করেছি ...

Host myserver.com
  User my-ssh-username
  RequestTTY Yes

1

আপনি ssh এ প্রক্সি জাম্প বিকল্পটি ব্যবহার করতে পারেন

-J [user@]host[:port]
 Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there.  Multiple jump hops may be specified
 separated by comma characters.  This is a shortcut to specify a ProxyJump configuration directive.

সুতরাং আমার যদি হোস্টবিতে সংযোগ স্থাপন করতে হয় তবে সেখানে যাওয়ার জন্য আমাকে প্রথমে হোস্টএ দিয়ে যেতে হবে। সাধারণত আমি চাই

 ssh hostA
 [user@hostA ~]$ ssh hostB

আমি এখন এই কাজ

ssh -J hostA hostB
[user@hostB ~]$

0

আপনি কমান্ড লাইন থেকে একটি এসএসএইচ কনফিগারেশন বিকল্প "রিকোয়েস্টটিটিওয়াই" ওভাররাইড করতে পারেন।

আমার কার্যকারী উদাহরণটি একাধিক কমান্ড চালানোর পরে এসএসএইচ সেশনে cd-serv-one.shশুরু /bin/bashহয়:

#!/bin/bash

ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"

এবং এখন আমি কেবল ./cd-serv-one.shপ্রয়োজনীয় এসএসএইচ সেশন শুরু করার জন্য চালাচ্ছি ।

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