পূর্ণ লগইন শেল দিয়ে রিমোট এসএস কমান্ড চালান


48

আমি ssh example.com 'ls'তবে এসএসএস ম্যানপেজের মতো কিছু করতে চাই :

যদি কমান্ডটি নির্দিষ্ট করা থাকে তবে এটি লগইন শেলের পরিবর্তে দূরবর্তী হোস্টে সম্পাদন করা হয়।

সুতরাং যা ঘটে তা হ'ল lsএটি আউটপুট প্রদর্শন করে এবং তারপরে ssh প্রস্থান করে।

আমি যা বুঝতে পারি না তা হল কিভাবে সম্পূর্ণ লগইন শেলটি খোলা থাকে এবং তারপরে সেই শেলের ভিতরে কমান্ড চালানো যায়। কমান্ড চালানোর পরে খোলা খোলা রেখে। যেন আমি ম্যানুয়ালি নিম্নলিখিতগুলি সম্পন্ন করেছি:

  localhost$ ssh example.com 
example.com$ ls
             /folder1 
             /folder2 
example.com$ _

কোন ধারনা?


এটি একটি অনুরূপ প্রশ্ন superuser.com / জিজ্ঞাসাগুলি / 261617/… তবে উত্তরগুলির কোনওটিরই আমি কী করার চেষ্টা করছি তা সত্যিই মানায় না।
ম্যাথো

কীভাবে ssh example.com 'ls;bash'?
আন্দ্রেজ কইনিকভস

দ্বিতীয় শেলটিকে একটি ইন্টারেক্টিভ করে তুলতে আপনার সিস্টেমে -i দরকার।
ফ্লেক্সো

বিকল্প -t হ'ল আপনার প্রশ্নের উত্তর। অন্যান্য বিকল্প (উদাহরণস্বরূপ কীচেইন) বিদ্যমান তবে এটি আপনার আসল প্রয়োজনের উপর নির্ভর করে, যা আমার পক্ষে যথেষ্ট পরিষ্কার নয়।
হর্নেটবেজ

@ হোর্নেটবজ -টি আমাকে সিউডো-টিটি দেয়। তবে অন্যথায় আচরণ একই রকম। আমি একটি ইন্টারেক্টিভ শেলটি চালু করতে চাই, সেই শেলের ভিতরে একটি কমান্ড চালাব এবং কমান্ডটি চালানোর পরে শেলটি খোলা রাখতে চাই।
ম্যাথো

উত্তর:


40

কেবলমাত্র ল্যাশকে এক্সিকিউট করতে বলুন lsএবং তারপরে নিজেই লগইন শেল এ

$ ssh user@host  -t 'bash -l -c "ls;bash"'

2
দুর্ভাগ্যক্রমে এটি ব্যবহার করার সময় কাজ করে না screen। অন্যথায় এটি দেখে মনে হচ্ছে যা করার চেষ্টা করছিলাম তা করে।
ম্যাথো

31
ssh user@host -t 'ls; exec $SHELL -l'

-tজাল ছদ্ম-টার্মিনাল বরাদ্দ। এটি একটি দূরবর্তী মেশিনে স্বেচ্ছাসেবী স্ক্রিন-ভিত্তিক প্রোগ্রামগুলি কার্যকর করতে ব্যবহার করা যেতে পারে। তুলনায় কিছুটা বেশি যথাযথ bash -i

exec কোনও নতুন প্রক্রিয়া তৈরি হয় না।

-lorder / .Bash_profile, ~ / .Bash_login, এবং ~ /। প্রোফাইলে সন্ধান করুন এবং সেই আদেশগুলি পড়েন এবং কার্যকর করেন ... এগুলি ছাড়া আপনি সম্ভবত ~ / বিন ডিরেক্টরি থেকে স্ক্রিপ্ট / আদেশগুলি পরিচালনা করতে পারবেন না কারণ এই কোডটি ~ /। প্রোফাইল থেকে -lপতাকা ছাড়া কার্যকর করা হবে না :

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

@ গ্রাভিটি @ অ্যালান এটি একটি কার্যবিধির মতো কাজ করতে পারে তবে আমি সত্যিই কমান্ডটি শেলটির অভ্যন্তরে চালিত করতে চাই এবং কমান্ডটি চালানোর পরে কোনও নতুন শেল না খোলার জন্য চাই।
ম্যাথেজ

+1, -তাই অবশ্যই ওভার যাওয়ার সঠিক উপায় -i, আমি এটি সম্পর্কে ভুলে গেছি।
ফ্লেক্সো

@ মাতৃ: এটির bashঅনুমতি দিতে আপনাকে নিজেকে প্যাচ করতে হবে।
মাধ্যাকর্ষণ

@grawity সত্যিই, আমার উত্তর নিচে দেখুন
Fons

@ মাতৃ, ব্যবহার exec bashবাexec $SHELL
ইউজেন কনকভ

1

ফনদের উত্তরের বিষয়ে আপনার মন্তব্যে আপনি বলেছিলেন যে এটি ব্যবহার করার সময় কাজ করে না screen

আপনি কি এই বিস্তারিত বলতে পারেন? ওপেনশের সোর্স কোডটি দেখে sshd কল করে কমান্ডটি কার্যকর করে

YOUR_DEFAULT_SHELL -c COMMAND

সুতরাং, উদাহরণস্বরূপ, যদি আপনার ডিফল্ট শেল হয় screen, তবে এটি এত কার্যকরভাবে কাজ করবে না কারণ screenএর -cপতাকাটি এর উপরে সজ্জিত করে .scrreenrc। সুতরাং, যদি এটি আপনার ডিফল্ট শেল হয় তবে স্ক্রিনে কমান্ডগুলি প্রেরণ করার কোনও উপায় নেই। আপনাকে ssh এ দেওয়া কমান্ড হিসাবে আসলে পর্দা চালাতে হবে তবে একটি ডিফল্ট শেল যা স্ক্রিন নয়

যদি আপনি এটি করার চেষ্টা করছেন তবে আমি মনে করি জিনিসগুলি সত্যই অদ্ভুত হয়ে উঠবে, যেহেতু screenঅ ইন্টারঅ্যাক্টিভ প্রোগ্রামগুলির সাথে উইন্ডোগুলিও বন্ধ করে দেবে, তাই আপনাকে ফন্টগুলির অনুরূপ কৌশল করতে হবে তবে আরও গভীর স্তর level সুতরাং, যেমন, আপনার ডিফল্ট শেল হিসাবে / বিন / ব্যাশ (এবং স্ক্রিন নয়) এর মতো কিছু:

ssh user@host -t 'screen bash -l -c "ls;bash"'

যা একটি গভীর শ্বাস নিতে হবে - হোস্টের মধ্যে ssh হওয়া উচিত, স্ক্রিনের একটি কমান্ড দিয়ে বাশ -c চালান, যা একটি নতুন উইন্ডো তৈরি করবে। যদি এই উইন্ডোটি সবেমাত্র ls খুলতে থাকে তবে এটি শেষ হবে এবং স্ক্রিনটি সমাপ্ত হবে, সুতরাং আমরা নতুন স্ক্রিন উইন্ডোর অভ্যন্তরে ফনের কৌশল ব্যবহার করি ।

আমি মনে করি এটি কাজ করবে, এমনকি যদি আপনি যা করার চেষ্টা করেছিলেন তাও;)


আমি মনে করি যে screenএই পরিস্থিতিতে আমার যে সমস্যাটি রয়েছে তা হ'ল আমি সাধারণত এটি exec screen -RRআমার থেকে লোড করি .profile। এর অর্থ হ'ল bash -lপর্দাটি লোড করার চেষ্টা করে যা এর বাকি অংশটি ছুঁড়ে দেয়। দেখে মনে হচ্ছে আপনার উভয় এবং @ ফন্ট সমাধানগুলিতে '-l' মুছে ফেলার মাধ্যমে আমি এটির আশেপাশে যেতে পারি (আপনার পরে আমাকে এতে ছেড়ে যায় screen)। যদিও এটি এক ধরণের বিরক্তিকর।
ম্যাথো

0

একাধিক-টি বিকল্পগুলি tty বরাদ্দকে বাধ্য করে, যদিও ssh এর কোনও স্থানীয় tty নেই:

ssh -tt user@host 'bash -l -c "/path/to/command'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.