প্রশ্ন কিভাবে আমি ssh লগইন ডিরেক্টরি স্বয়ংক্রিয়ভাবে পরিবর্তন করতে পারেন?


আমি পেতে চেষ্টা করছি ssh যখন আমি লগ ইন করি তখন স্বয়ংক্রিয়ভাবে একটি নির্দিষ্ট ডিরেক্টরির মধ্যে পরিবর্তন করতে। আমি নিম্নলিখিত নির্দেশাবলী ব্যবহার করে যে আচরণ কাজ করে চেষ্টা করার চেষ্টা ~/.ssh/config:

Host example.net
LocalCommand "cd web"

কিন্তু যখনই আমি লগ ইন করি, তখন আমি নিম্নলিখিতটি দেখি:

/bin/bash: cd web: No such file or directory

যদিও স্পষ্টভাবে একটি আছে যদিও web আমার হোম ডিরেক্টরি ফোল্ডার। এমনকি একটি পরম পথ ব্যবহার করে একই বার্তা দেয়। স্পষ্ট হতে, যদি আমি টাইপ cd web লগ ইন করার পরে আমি ডান ফোল্ডারে পেতে।

আমি কি এখানে অনুপস্থিত?

সম্পাদনা করুন:

উদ্ধৃতি / পরম পথ বিভিন্ন সমন্বয় বিভিন্ন ত্রুটি বার্তা দিতে:

LocalCommand "cd web"
/bin/bash: cd web: No such file or directory

LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory

LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error

এটি আমাকে মনে করে যে কোটগুলি সেখানে থাকা উচিত নয় এবং অন্য একটি ত্রুটি ঘটেছে।


79
2017-08-05 14:40


উত্স


LocalCommand আপনার স্থানীয় সিস্টেমে চালিত হয়, রিমোট সিস্টেম নয়। - Steve Kehlet
এখানে দেখো superuser.com/a/124110/47962 - Nakilon


উত্তর:


সিডি একটি শেল নির্মিত হয়। LocalCommand হিসাবে মৃত্যুদন্ড কার্যকর করা হয়:

/bin/sh -c <localcommand>

আপনি কি খুঁজছেন তা সত্যিই SSH মাধ্যমে সম্পন্ন করা যাবে না; আপনাকে কিছু উপায়ে শেল পরিবর্তন করতে হবে, উদাঃ bashrc / bash_profile মাধ্যমে।


19
2017-08-05 15:52



হ্যাঁ, শুধু একই উল্লেখ করতে চেয়েছিলেন। আপনি রাখতে পারেন cd কমান্ড ~/.bashrc পরিবর্তে দূরবর্তী সার্ভারে। - vdboor
ওইটা বিরক্তিকর. অন্য একটি মন্তব্যে যেমন উল্লেখ করা হয়েছে, সার্ভারটিতে বেশ কয়েকটি হোস্টনাম রয়েছে এবং আমি যা ব্যবহার করতাম তার উপর ভিত্তি করে ভিন্ন আচরণ করতে চেয়েছিলাম। আমার মনে হয় এটা নির্ধারণ করা সম্ভব নয় যে .bashrc থেকে কি ব্যবহার করা হয়েছিল? - Gareth
এটা সম্ভবত, সম্ভবত সম্ভবত যুক্তিযুক্ত নয়। একটি ছোট শেল স্ক্রিপ্ট বা উদীয়মানের সাথে ssh প্রতিস্থাপনের মতো কিছু যা হোস্ট নামটি একটি পরিবর্তনশীল হিসাবে প্রেরণ করে (একটি লা "ssh -t ব্যবহারকারী @ হোস্ট 'এক্সপোর্ট connhostname = host; bash --login'")। কিন্তু আপনি সত্যিই খুব অদ্ভুত অঞ্চলে পেতে শুরু করছি। সম্ভবত একটি ভাল প্রশ্ন, আপনি এই আচরণ চান কেন? - BMDan
এটা সত্যিই বড় যে একটি চুক্তি সৎ হতে না। আমি ঠিক সেই অবস্থানে আছি যেখানে আমি এই সার্ভারে লগ ইন করার জন্য বেশিরভাগ সময়ই সরাসরি দুটি ডিরেক্টরী (আমি যা হোস্ট ব্যবহার করছি তার উপর নির্ভর করে) - Gareth


এইটা কাজ করে:

ssh server -t "cd /my/remote/directory; bash --login"

একটি ডিরেক্টরি তৈরি করতে যদি এটি বিদ্যমান না থাকে:

ssh server -t "mkdir -p newfolder; cd ~/newfolder; pwd; bash --login"

যদি আপনি যোগ না bash পথ শেষে আপনি পরে প্রস্থান cd কম্যান্ড রান। এবং যদি আপনি যোগ না --login তারপর আপনার ~/.profile sourced হয় না।


76
2017-12-21 21:29



এটি একটি বাশ প্রম্পট সঙ্গে, সঠিক অবস্থানে আমাকে শেষ। পারফেক্ট! - Peter Ehrlich
এটি আমার জন্যও কাজ করে কিন্তু আমি যদি এসএসআই জাম্প-হোস্টের সাথে এটি ব্যবহার করার চেষ্টা করি তবে এটি কাজ করবে না। আমি একটি সংযোগ বন্ধ বার্তা পেতে। - Riccardo


  1. আপনার বক্সে লগইন করুন
  2. সম্পাদন করা ~/.bash_profile 
  3. ফাইল শেষ শেষে cd /path/to/your/destination
  4. এটি সংরক্ষণ করুন এবং আপনার সম্পাদক প্রস্থান করুন
  5. বক্স থেকে লগআউট
  6. আবার লগইন করুন এবং আপনি এটি ভূমি করা উচিত /path/to/your/destination

40
2018-02-27 11:04



কিছু মেশিনে আপনি যোগ করার প্রয়োজন হতে পারে cd /path/to/your/destination থেকে ~/.bashrc পরিবর্তে ~/.bash_profile। ফলাফল একই হতে হবে। - Matthias
এটি পুরোপুরি ধন্যবাদ - এটি কি শুধুমাত্র আমার ব্যবহারকারী আইডি থেকে সীমাবদ্ধ নাকি এটি অন্যান্য ব্যবহারকারীর লগইনগুলিকেও প্রভাবিত করবে? - barry_allen
আপনি পরিবর্তন যদি @BabyGroot ~/.bash_profile অথবা ~/.bashrc এটি শুধুমাত্র বর্তমান ব্যবহারকারী প্রভাবিত করবে। - rubenvarela


যখন আপনি ssh এবং ডিফল্ট overwride প্রয়োজন ক্ষেত্রে আরো শক্তসমর্থ সমাধান। Bashrc ফাইল। এটি যখন রিমোট সার্ভার পরিবেশে একাধিক ডকরুট থাকে এবং একাধিক ব্যবহারকারীর দ্বারা ব্যবহৃত হয় সেক্ষেত্রে এটি কার্যকর।

alias ssh_myserver='ssh server_name -t "echo cd /path/to/desired/dir>/tmp/.bashrc_tmp; bash --rcfile /tmp/.bashrc_tmp"'

আরো বিস্তারিত:

  1. প্রথম কমান্ড তৈরি করে .bashrc_tmp ফাইল /tmp একটি কন্টেন্ট সঙ্গে রিমোট সার্ভারে ডিরেক্টরি cd /path/to/dir
  2. পরবর্তী কমান্ড executes bash ধাপ 1 এ উল্লেখ কনফিগার ফাইলের সাথে। এটি পছন্দসই ডায়রিতে স্যুইচ করতে এবং ডিফল্ট দমন করতে দেয় .bashrc
  3. এই পুরো কমান্ড একটি হিসাবে আবৃত করা হয় alias, তাই ssh ক্লায়েন্ট কমান্ড প্রম্পটে এটি হিসাবে বলা যেতে পারে ssh_myserver

5
2017-08-21 11:53



ক্রিয়েটিভ ... যতক্ষণ আপনার লেখার অনুমতি / tmp আছে - smci


আপনি আপনার ssh কনফিগারেশন এই নির্দেশিকা সক্রিয় আছে?

PermitLocalCommand yes

যে জন্য ডিফল্ট হয় no, আপনার ক্ষেত্রে যা LocalCommand নির্দেশ উপেক্ষা করা হবে।

অন্যথায়, আপনি আপনার কমান্ড যোগ করার চেষ্টা করেছেন .bashrc ফাইল?


4
2017-08-05 14:47



যে নির্দেশ সেট করা হয়, হ্যাঁ (এবং আমি অনুমান করি যে এটি প্রদর্শিত না হলে ত্রুটি বার্তা দেখানো হবে না)। .Bashrc ব্যবহার করে সমস্যাটি হল যে সার্ভারটির বিভিন্ন হোস্ট নাম রয়েছে এবং আমি বিভিন্ন হোস্ট নামগুলিকে বিভিন্ন সূচনা নির্দেশিকায় অনুবাদ করতে চাই - Gareth
যতক্ষণ না প্রতিটি হোস্টের নামের একটি ভিন্ন আইপি ঠিকানা থাকে, সার্ভারের কোনও হোস্ট নামটি জানতে চাওয়া হবে না। HTTP অনুরোধগুলি একটি বন্ধুত্বপূর্ণ হোস্ট প্রদান করে: অনুরোধ করা হোস্ট নাম সনাক্ত করতে হেডার, SSH সংযোগগুলি না। - Fosco


তাই আমি অনেক ওয়েবসাইট অনুসন্ধান করেছি (স্ট্যাকওভারফ্লো, এই এক) কিন্তু আমি যা চেয়েছিলাম তা পাইনি। আমি আমার নিজের শেল স্ক্রিপ্ট তৈরি শেষ পর্যন্ত। আমি এখানে পেস্ট করছি। এছাড়াও আপনি এটি $ PATH তে একটি ডিরেক্টরি অনুলিপি করতে পারেন।

#!/bin/bash
ssh -t <username@hostname> "cd ~/$1; exec \$SHELL --login"

তাই এই পরে। আমি করি:

connect <foldername>

দ্রষ্টব্য: পাথ পরিবর্তনশীল পরিবর্তন করার পরে আপনাকে আবার লগ আউট করতে এবং লগ ইন করতে হবে


4
2017-11-25 03:10



আমি পূর্বের প্রস্তাবটি এটিকে পছন্দ করি কারণ '$ SHELL' সর্বদা বৈধ, যখন 'ব্যাশ' হতে পারে না। এছাড়াও 'exec' ব্যবহারটি একটি চমৎকার স্পর্শ। - Dave
একটি আরও পরিমার্জন নিশ্চিত করা হবে 'সিডি' সফল - "সিডি ~ / $ 1 && exec ..." - Dave


আপনার মধ্যে ~/.ssh/config:

LocalCommand echo '/home/%r/some/subdir' > /home/%r/.ssh/ssh_cd

আপনার শেষে ~/.bashrc:

if [[ -f $HOME/.ssh/ssh_cd ]]
then
    cd $(<$HOME/.ssh/ssh_cd)
    # uncomment the line below and the file will be removed so the cd won't work
    # unless the file is regenerated since you may not want this to operate for
    # non-ssh logins or for ssh logins that you want to function differently
    # rm $HOME/.ssh/ssh_cd
fi

আমি এক্সপোর্ট পরিবর্তনশীল সহ সহ পরিবর্তনশীল ক্ষণস্থায়ী ব্যবহার করে এটি করার চেষ্টা করেছি, কিন্তু এই কমান্ডগুলি বিভিন্ন শেলগুলিতে চালিত হয়।

যখন আপনি চেষ্টা করার চেষ্টা করছেন তখন পরীক্ষার সময় আমি কোনওভাবে ত্রুটিহীন পরম পথ ব্যবহার করার সময় ত্রুটি খুঁজে পাইনি। আমি যোগ করলাম ; pwd কমান্ডের শেষে এবং সঠিক ডিরেক্টরি প্রদর্শন করা হয়, তবে যে ডিরেক্টরিটি আমি শেষ করেছি তা হল ~। সেখানে নেই cd আমার শেল প্রারম্ভকালে ফাইলের মধ্যে কমান্ড। আমি একটি ভিন্ন নির্বাণ চেষ্টা cd somedir; pwdমধ্যে ~/.ssh/rc (অন্য জায়গায় এখনও সঙ্গে)। দ্য config আদেশ জারি করা হয় এবং আগে আদেশ কার্যকর করা হয় rc কমান্ড পরে জারি করা হয়, কিন্তু শেল প্রারম্ভ ফাইল আগে sourced হয়। তাই আবার, এটি একটি ভিন্ন শেল মধ্যে ঘটছে।

পাস-বাই-ফাইল কৌশলটি চেষ্টা করুন এবং এটি আপনার জন্য কাজ করে আমাকে জানান।


3
2017-08-05 18:21





আপনি এটি চারপাশে উদ্ধৃতি ছাড়া এটি চেষ্টা করেছেন? একমাত্র উদাহরণ যা আমি দেখেছি তা তাদের কাছে নেই তাই এটি একটি কমান্ড হিসাবে সিডি \ ওয়েব চালানোর চেষ্টা করতে পারে।


2
2017-08-05 15:03



ঠিক আছে, উদ্ধৃতিগুলি উদ্ধৃত করা বলে মনে হচ্ছে তবে আমার এখনও ত্রুটি রয়েছে (সম্পাদিত পোস্টটি দেখুন) - Gareth


আপনি বিকল্প সঙ্গে এই চেষ্টা করতে পারে -t:

ssh server -t "cd /my/remote/directory; bash"

0
2017-09-21 09:03