এসএসএস, লগইনে একটি কমান্ড চালান, এবং তারপরে লগ ইন থাকুন?


29

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

আমরা কি এসএসএসের মাধ্যমে কোনও স্ক্রিপ্ট চালাতে পারি যা দূরবর্তী মেশিনগুলিতে লগ ইন করে, কমান্ড চালাবে, এবং সংযোগ বিচ্ছিন্ন করবে না?

সুতরাং একটি মেশিনে ssh করুন, যেমন এবং এই জাতীয় ডিরেক্টরিতে সিডি করুন এবং তারপরে একটি কমান্ড চালান এবং লগ ইন থাকুন।

-Jonathan

(আশা করি আমি ব্যবহার করেছি)

#!/usr/bin/expect -f
set password [lrange $argv 0 0]
spawn ssh root@marlboro "cd /tmp; ls -altr | tail"
expect "?assword:*"
send -- "$password\r"
send -- "\r"
interact

9
এটি কেবল আমি বা আপনি পাবকি বা অন্যান্য বুদ্ধিমান পদ্ধতি ব্যবহার না করে এইভাবে পাসওয়ার্ড প্রমাণীকরণটি "স্বয়ংক্রিয়করণ" করছেন?
মাধ্যাকর্ষণ

উত্তর:


25

; /bin/bashদূরবর্তী দিকে আপনার কমান্ড লাইনের শেষে একটি যুক্ত করবেন? এটাই:

spawn ssh -t root@marlboro "cd /tmp; ls -altr | tail; /bin/bash -i"

আরও ভাল, রুটের .bashrc কে এই জাতীয় কিছু হিসাবে পরিবর্তন করুন:

PROMPT_COMMAND="cd /tmp && ls -altr | tail ; unset PROMPT_COMMAND"

:)


2
আপনি -iযে ব্যাশে যোগ করতে পারেন ।
টেডি 19

হ্যাঁ, আমি মনে করি :)
বিল ওয়েইস

যখন আমি এটি করি, ট্যাব সমাপ্তি নতুন শেলের মধ্যে বিভক্ত হয় (এমনকি "-i" সহ) - কেন / কীভাবে ঠিক করবেন কোনও ধারণা?
কোডার

1
আমি এখানে আমার নতুন উত্তর পরীক্ষা করেছি, এটি দুর্দান্ত কাজ করে। কিছুটা রুক্ষ, তবে এটি কাজ করে।
বিল ওয়েইস

7
ssh -tএকটি অনুগ্রহ বরাদ্দ করার চেষ্টা করুন ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

4

আপনি যদি পাইথনে এটি করার ক্ষেত্রে ঠিক থাকেন তবে পেক্সপেক্সের একটি উদাহরণ রয়েছে যা আপনি যা চেয়েছিলেন ঠিক তা করে:

import pexpect
child = pexpect.spawn ('ftp ftp.openbsd.org')
child.expect ('Name .*: ')
child.sendline ('anonymous')
child.expect ('Password:')
child.sendline ('noah@example.com')
child.expect ('ftp> ')
child.sendline ('ls /pub/OpenBSD/')
child.expect ('ftp> ')
print child.before   # Print the result of the ls command.
child.interact()     # Give control of the child to the user.

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

import pexpect
child = pexpect.spawn ('ssh root@marlboro')
child.expect ('Password:')
child.sendline ('password')
child.expect ('prompt# ')
child.sendline ('cd /tmp')
child.expect ('prompt# ')
child.sendline ('ls -altr | tail')
child.expect ('prompt# ')
print child.before, child.after   # Print the result of the ls command.
child.interact()     # Give control of the child to the user.

আমাকে ভুল করবেন না, আমি প্রত্যাশা করি (বিশেষত অটেক্সেকপেক্ট), তবে পাইথন আমার পক্ষে আঁকড়ে ধরার পক্ষে খুব সহজ।


আমিও প্রত্যাশা থেকে প্রত্যাশায় রূপান্তর করছি। অজগর এখন অনেক বেশি সর্বব্যাপী।
জেএম বেকার

4

কোনও সার্ভারে প্রবেশের সম্ভাব্যতম সহজতম উপায় way শেলের ভিতরে একটি ইন্টারেক্টিভ শেল এবং রান কমান্ডগুলি হ'ল বাশের জন্য একটি কাস্টম আরসি ফাইল তৈরি করা।

সার্ভারে আপনার কাস্টম বাশার্ক ফাইলটিতে প্রথমে ডিফল্ট ফাইল উত্স করুন এবং তারপরে আপনার কাস্টম কমান্ডগুলি যুক্ত করুন, যেমন

~ / .Bashrc_custom:

. ~/.bashrc
cd dir/
workon virtualenvproject

তারপরে আপনি নিজের এসএসএইচ অধিবেশনটি এভাবে শুরু করতে পারেন:

$ ssh -t server "/bin/bash --rcfile ~/.bashrc_custom -i"

-tবিকল্প বাহিনীর সিউডো-TTY বরাদ্দ, তাই ট্যাব-সমাপ্তি কাজ ভালো যে জিনিস।

--rcfileবিকল্প নির্দিষ্ট করে যা rcfile পরিবর্তে ডিফল্ট এক লোড করা হয়নি। গুরুত্বপূর্ণ: স্বীকৃত হওয়ার জন্য আপনাকে একক-অক্ষর বিকল্পগুলির আগে কমান্ড লাইনে "ডাবল-ড্যাশ যুক্তি" রাখতে হবে।

-i/ বিন / ব্যাশ আর্গুমেন্ট প্রাপ্ত করতে একটি ইন্টারেক্টিভ শেল সেখানে ডাকা হয়।


আসলে না. আমি প্রতিটি সংযোগের জন্য বিভিন্ন কমান্ড চালাতে চাইলে কী করব?
ইউজেন কনকভ

1

যদি কেউ পটভূমিতে কী ঘটছে সে সম্পর্কে তথ্য চায়, আপনার এসএসডি ম্যানুয়ালটি একবার দেখে নেওয়া উচিত:

যখন কোনও ব্যবহারকারী সাফল্যের সাথে লগ ইন করে, sshd নিম্নলিখিতগুলি করে:

  1. যদি লগইনটি টিটি-তে থাকে এবং কোনও কমান্ড নির্দিষ্ট না করা থাকে তবে শেষ লগইন সময় এবং / ইত্যাদি / মোটিড প্রিন্ট করে (কনফিগারেশন ফাইলে বা ~ / .hushlogin দ্বারা প্রতিরোধ না করা; ফাইল বিভাগটি দেখুন)।
  2. লগইনটি যদি টিটিটিতে থাকে তবে লগইন সময় রেকর্ড করে।
  3. চেকস / ইত্যাদি / নোলগিন এবং / ভার / রান / নোলোগিন; যদি কোনওটি বিদ্যমান থাকে তবে তা সামগ্রীগুলি মুদ্রণ করে এবং প্রস্থান করে (মূল ব্যতীত)।
  4. সাধারণ ব্যবহারকারীর সুবিধাসমূহ নিয়ে চলার পরিবর্তনগুলি।
  5. বেসিক পরিবেশ সেট আপ।
  6. Exists / .ssh / এনভায়রনমেন্ট ফাইলটি উপস্থিত থাকলে এবং ব্যবহারকারীদের তাদের পরিবেশ পরিবর্তন করার অনুমতি দেওয়া হয়। Sshd_config (5) এ PermitUserEn वातावरण বিকল্প দেখুন।
  7. ব্যবহারকারীর হোম ডিরেক্টরিতে পরিবর্তন।
  8. যদি ~ / .ssh / আরসি বিদ্যমান থাকে তবে এটি চালায়; অন্যথায় যদি / etc / ssh / sshrc উপস্থিত থাকে তবে এটি চালায়; অন্যথায় xauth (1) চালায়। `` আরসি '' ফাইলগুলিকে এক্স 11 প্রমাণীকরণ প্রোটোকল এবং স্ট্যান্ডার্ড ইনপুটটিতে কুকি দেওয়া হয়। নীচে, এসএসএইচআরসি দেখুন।
  9. ব্যবহারকারীর শেল বা কমান্ড চালায় ।

https://www.freebsd.org/cgi/man.cgi?sshd(8)#LOGIN_PROCESS


0

আপনার উদ্দেশ্যকে পরাভূত করার কারণে আপনার সাধারণত এ জাতীয় উপায়ে এসএসএস ব্যবহার করা এড়ানো উচিত।
একটি কর

ssh-add -l | grep "file_of_your_rsa_priv_key_here"

আপনার কীটি এসএস অ্যাক্টিভ সেশন পুলে তালিকাভুক্ত রয়েছে তা দেখার জন্য বা অন্যথায় এটি যুক্ত করুন (এসএসএড-অ্যাড সহ)।

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