ssh, একটি নির্দিষ্ট শেল শুরু করুন, এবং দূরবর্তী মেশিনে একটি কমান্ড চালাবেন?


11

আমি এমন পরিস্থিতিতে আছি যেখানে বেশ কয়েকটি ব্যবহারকারী একই ব্যবহারকারীর রিমোট মেশিনে ভাগ করে নিচ্ছেন। আমার একটি "ব্যক্তিগত" ডিরেক্টরি আছে যেখানে আমি আমার নিজের .zshrcফাইলটি লিখেছিলাম এবং আমি এর উপায়ও চাই:

  1. আমার ssh কনফিগারেশন ফাইল (যেমন ControlMaster auto) এর নির্দেশাবলী সহ দূরবর্তী মেশিনে একটি এসএস সেশন শুরু করুন
  2. এই অধিবেশনটি একটি জেড শেল চালায়
  3. এটি .zshrcআমার "ব্যক্তিগত" ডিরেক্টরিতে চালিত হয় (ভাগ করা ব্যবহারকারীর হোম ডিরেক্টরিতে নয়)

এটির জন্য এই জাতীয় এসশন সেশনগুলি শুরু করার একটি সহজ উপায় বা কোনও সহজ উপায় (আপনার ওপেনএসএসএইচ কনফিগারেশন ফাইলটি ব্যবহার করার বিষয়ে আমি ভেবেছিলাম) ভাল লাগবে তবে আমি অন্য কোনও ধারণার জন্য উন্মুক্ত!

ওপেনএসএইচ-এর কনফিগার ফাইলটি ব্যবহার করছেন?

আমি ওপেনএসএইচ-এর ssh_config ম্যান পৃষ্ঠায় পড়েছি যে সার্ভারের সাথে সংযোগের পরে সাফল্যের সাথে সংযোগের পরে স্থানীয়ভাবেLocalCommand চালানোর জন্য একটি নির্দেশ নির্দিষ্ট করতে আমি নির্দেশটি ব্যবহার করতে পারি । এটি আমাকে ভেবেছিল যে সার্ভারের সাথে সংযোগ স্থাপনের পরে কী কমান্ডটি দূরবর্তীভাবে চালানো উচিত তা ফাইলকে বলার উপায় আছে তবে এটির কোনও উপস্থিতি নেই।config


আমি মনে করি না আপনি পারবেন। আপনি কেন এটি চান তা নিয়ে আমি বিস্মিত। Ssh কমান্ড লাইনে ইতিমধ্যে একটি কমান্ড রয়েছে। আপনি চালাতে পারবেন না কেন ssh mycommand? এবং যদি আপনি ssh উপর আসা প্রতিটি কমান্ডের আগে কিছু সেটআপ কমান্ড চালাতে চান তবে সার্ভারের দিকটি কনফিগার করবেন না কেন?
গিলস 'অশুভ হওয়া বন্ধ করুন'

ধন্যবাদ @ গুইলস আমি এমন পরিস্থিতিতে রয়েছি যেখানে একাধিক ব্যবহারকারী একই দূরবর্তী অ্যাকাউন্টটি ভাগ করছেন, তাই আমি দূরবর্তীভাবে লগ ইন করার সাথে সাথে কয়েকটি জিনিস দ্রুত সেট আপ করতে চাই। আরও নির্দিষ্টভাবে, আমি একটি জেড শেল শুরু করতে এবং এটি .zshrcএকটি নির্দিষ্ট ডিরেক্টরিতে (যেমন একটি "ব্যক্তিগত" হোম ডিরেক্টরি) চালাতে বলি । আমি চেষ্টা করেছিলাম ssh -t host_name 'zsh & source /path/to/my_zshrc'কিন্তু এটি কার্যকর হয়নি (আমি পেয়েছি FPATH variable not defined, এবং আমি মনে করি এটি zshচলার আগেই এটি শেষ হয়ে যায় কারণ এটি my_zshrcআমাকে জেড শেল দেয় না)
আমেলিও ওয়াজকিজ-রেইনা

আমি মনে করি এটি অপের আপডেটের প্রাপ্য, তাই আমি কেবল এটি আপডেট করেছি।
আমেলিও ভাজকেজ-রেইনা

আমার অনুরূপ উত্তর খুঁজতে গিয়ে, আমার কাছে ঘটে যায় যে আপনি যা করার চেষ্টা করছেন তার এই প্রশ্নটি খুব কাছে।
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

উত্তর:


15

দূরবর্তীভাবে একটি কমান্ড চালানোর সর্বাধিক সুস্পষ্ট উপায় হ'ল এটি ssh কমান্ড লাইনে নির্দিষ্ট করা। Ssh কমান্ড সর্বদা দূরবর্তী ব্যবহারকারীর শেল দ্বারা ব্যাখ্যা করা হয়।

ssh bob@example.com '. ~/.profile; command_that_needs_environment_variables'
ssh -t bob@example.com '. ~/.profile; exec zsh'

ভাগ করা অ্যাকাউন্টগুলি সাধারণত একটি খারাপ ধারণা; যদি সম্ভব হয় তবে প্রতিটি ব্যবহারকারীর জন্য পৃথক অ্যাকাউন্ট পান। যদি আপনি একটি ভাগ করা অ্যাকাউন্টে আটকে থাকেন তবে আপনি একটি উপাধি তৈরি করতে পারেন:

ssh -t shared-account@example.com 'HOME=~/bob; . ~/.profile; exec zsh'

আপনি যদি সার্বজনীন কী প্রমাণীকরণ ব্যবহার করেন (আবার প্রস্তাবিত), আপনি প্রতি-কী আদেশগুলি সংজ্ঞায়িত করতে পারেন ~/.ssh/authorized_keys। আরও ব্যাখ্যা জন্য এই উত্তর দেখুন । ~/.ssh/authorized_keysসার্ভারে আপনার কীটির জন্য লাইনটি সম্পাদনা করুন (সমস্তই এক লাইনে):

command="HOME=$HOME/bob;
     if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
       eval \"$SSH_ORIGINAL_COMMAND\";
     else exec \"$SHELL\"; fi" ssh-rsa AAAA…== bob@some.where

চমত্কার @ গুয়েলস। এই সাইটে আপনার অবদানগুলি আমাদের সকলের জন্য এটি একটি অত্যন্ত দরকারী সংস্থান হিসাবে তৈরি করছে। সত্যিই অনেক ধন্যবাদ। যাইহোক, আমি execকমান্ড সম্পর্কে জানতাম না । সরাসরি exec zshকল zshকরা থেকে আলাদা কীভাবে ? কেন এই বিশেষ ক্ষেত্রে এটি গুরুত্বপূর্ণ?
আমিলিও ওয়াজকেজ-রেইনা

হুম, আমি দৌড়ালে ssh -t shared-account@example.com 'HOME=~/bob; exec zsh'আমি পাই HOME=~/bob: command not found। আমি আছি tcsh। যদি আমি চেষ্টা আমি একই সমস্যা পান HOME=/home/bob। আমি ব্যাশ এবং zsh চেষ্টা করেছি। কোন সূত্র কি কারণ হতে পারে? পরিশেষে, উপরের সিনট্যাক্সটি কি আমাকে ssh অধিবেশনটি ছেড়ে দেবে? (আমি যা চাই). আবার ধন্যবাদ.
আমেলিও ভাজকেজ-রেইনা

1
@intrpc execমূল শেলটি zsh এর সাথে প্রতিস্থাপন করে; ছাড়া zsh, zsh প্রস্থান না হওয়া এবং তারপরে প্রস্থান না হওয়া পর্যন্ত মূল শেলটি মেমরিতে থাকবে। মূল পার্থক্যটি কিছুটা মেমরি সঞ্চয় করছে, এটি খুব গুরুত্বপূর্ণ নয়। আপনার লগইন শেলটি (টি) সিএসএস হলে ব্যবহার করুন setenv HOME ~/bob; exec zsh। অবশেষে, যেহেতু zsh কোনও যুক্তি ছাড়াই শুরু করা হয়েছে, আপনি শেল সেশনটি পেয়ে যাবেন, যেমন আপনি যদি sshলগইন শেল হিসাবে সবে দৌড়ে এসে zsh রেখেছিলেন তবে আপনি পেয়ে যাবেন ।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

আপনার সাহায্যের জন্য আবার ধন্যবাদ। এক এখানে অনুসরণ প্রশ্ন। আরও কমান্ড চালানোর কোনও উপায়, কমান্ডের পরে exec zsh?
আমেলিও ভাজকেজ-রেইনা

1
@ অ্যামিলিও ওয়াজকেজ-রেইনা ডট ফাইলগুলির একটিতে আপনার নিয়ন্ত্রণ না থাকলে সুবিধাজনক নয়। আপনি ZDOTDIRভিন্ন ডিরেক্টরিতে ডট ফাইলগুলির জন্য zsh চেহারা তৈরি করতে পরিবেশের পরিবর্তনশীল সেট করতে পারেন । আপনার যদি ডট ফাইলগুলিতে কিছুটা নিয়ন্ত্রণ থাকে তবে আপনি পরিবেশের পরিবর্তনশীলতে কার্যকর করতে কোড যুক্ত এবং পাস eval $LC_STARTUP_CODEকরার মতো কিছু করতে পারেন । $ZDOTDIR/.zshrcLC_STARTUP_CODE
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

-3

সার্ভারের সাথে সংযোগ স্থাপনের পরে দূরবর্তীভাবে একটি কমান্ড চালানোর জন্য, আপনার .ssh / কনফিগারেশন ফাইলটিতে নিম্নলিখিত স্নিপেট যুক্ত করুন

PermitLocalCommand yes

Host <server-ip-address>
    LocalCommand *command*

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