আমার পছন্দসই পদ্ধতিটি এসএসএইচ কনফিগারেশন ফাইলটি ব্যবহার করছে (নীচে বর্ণিত), তবে আপনার ব্যবহারের উপর নির্ভর করে কয়েকটি সম্ভাব্য সমাধান রয়েছে।
কমান্ড লাইন আর্গুমেন্ট
আমি মনে করি এই পদ্ধতির সর্বোত্তম উত্তর হ'ল গ্রহণযোগ্য উত্তরের খ্রিস্টিয়ানবাণ্ডির জবাব:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
ডাবল উদ্ধৃতি ব্যবহার করা আপনাকে স্থানীয় মেশিন থেকে ভেরিয়েবলগুলি ব্যবহার করার অনুমতি দেবে, যদি না এগুলি অবরুদ্ধ হয় (যেমন $SHELL
এখানে রয়েছে)। বিকল্পভাবে, আপনি একক উদ্ধৃতি ব্যবহার করতে পারেন, এবং আপনি যে সমস্ত ভেরিয়েবল ব্যবহার করেন তা টার্গেট মেশিনের থেকে এক হবে:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
বাশ ফাংশন
আপনি কমান্ডটি ব্যাশ ফাংশনে মোড়ক দিয়ে সরল করতে পারেন। যাক আপনি কেবল এটি টাইপ করতে চান:
sshcd example.com /foo/bar
আপনি এটিকে যুক্ত করে এই কাজটি করতে পারেন ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
আপনি যদি ডিরেক্টরিটির জন্য দূরবর্তী মেশিনে বিদ্যমান একটি ভেরিয়েবল ব্যবহার করে থাকেন তবে অবশ্যই এটি থেকে বাঁচতে বা একক উদ্ধৃতিতে রেখে দেওয়ার বিষয়টি নিশ্চিত হন। উদাহরণস্বরূপ, এটি সেই ডিরেক্টরিতে সিডি করবে JBOSS_HOME
যা দূরবর্তী মেশিনে চলকটিতে সঞ্চিত থাকে :
sshcd example.com \$JBOSS_HOME
এসএসএইচ কনফিগারেশন ফাইল
অতিরিক্ত কমান্ড লাইন আর্গুমেন্ট ব্যবহার না করে আপনি যদি সুনির্দিষ্ট ssh কমান্ড সহ নির্দিষ্ট (বা কোনও) হোস্টের জন্য এই আচরণটি সর্বদা দেখতে চান তবে আপনি নিজের ssh কনফিগারেশন ফাইলটিতে RequestTTY
এবং RemoteCommand
বিকল্পগুলি সেট করতে পারেন ।
উদাহরণস্বরূপ, আমি কেবল এই আদেশটি টাইপ করতে চাই:
ssh qaapps18
তবে সর্বদা এই আদেশের মতো আচরণ করা চাই:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
সুতরাং আমি এটি আমার ~/.ssh/config
ফাইলে যুক্ত করেছি:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
এখন এই বিধিটি তার হোস্টনামে "অ্যাপস" সহ যে কোনও হোস্টকে প্রযোজ্য।
আরও তথ্যের জন্য http://man7.org/linux/man-pages/man5/ssh_config.5.html দেখুন