Vivasoft-logo

৪.৪ সার্ভার এ গিট – সার্ভার সেট আপ করা

সার্ভার সেট আপ করা

এখানে আমরা সার্ভার সাইডে গিট এক্সেস এর জন্য SSH সেট আপ করা দেখবো। এখানে আমরা আমাদের ইউজারদের অথেনটিকেট করার জন্য authorized_keys পদ্ধতি ব্যাবহার করবো । আমরা ধরে নিচ্ছি আপনি একটি লিনাক্স ডিস্ট্রিবিউশন যেমন Ubuntu ব্যাবহার করছেন।
নোট
এখানে যা কিছু দেখানো হয়েছে সবগুলই ssh-copy-id কমান্ড ব্যাবহার এর মাধ্যমে অটোমেট করা যাবে মেনুয়ালি পাবলিক কি কপি এবং ইন্সটল এর পরিবর্তে।
সবার প্রথমে আমরা একটি গিট ইউজার একাউন্ট তৈরি করবো এবং ওই ইউজার এর জন্য একটি .ssh ডিরেক্টরি তৈরি করবো।
				
					$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
				
			
পরবর্তীতে, authorized_keys ফাইল এ কিছু ডেভলপার SSH পাবলিক কি যোগ করতে হবে git ইউজার এর জন্য। আমরা ধরে নিচ্ছি আপনার কিছু পাবলিক কি তৈরি করা আছে এবং একটি ফাইল এ সেভ করা আছে । পাবলিক কি গুলো দেখতে এরকম হবে।
				
					$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJICUvax2T9va5 gsg-keypair
				
			
এখন আপনি শুধু .ssh ডিরেক্টরি তে গিট ইউজার দের authorized_keys ফাইল গুলো যোগ করুন।
				
					$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
				
			
এখন আপনি git init কমান্ড ব্যাবহার করে –bare অপশন দিয়ে একটি খালি গিট রিপজিটরি সেট আপ করতে পারবেন এই ইউজার এর জন্য, যেটা একটা রিপজিটরি তৈরি করবে ওয়ার্কিং ডিরেক্টরি বাদে।
				
					$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
				
			
তারপর , জন, জোসি অথবা জেসিকা এই রিপজিটরি তে তাদের প্রোজেক্ট এর প্রথম ভার্সন পুশ ০করতে পারবেন এই রিপজিটরি কে রিমোট রিপোজিটরি হিসেবে যোগ করার মাধ্যমে এটি প্রয়োজনে ব্রাঞ্ছ তৈরি করে ও পুশ করতে পারবেন। এখানে একটা বিষয় হলো সব সময় একটি নতুন প্রোজেক্ট যোগ করতে চাইলে কাউকে অবশ্যই মেশিনে শেল তৈরি করতে হবে এবং একটি খালি রিপোজিটরি তৈরি করতে হবে। এখানে সার্ভার এর হোস্ট নেইম হিসেবে আমরা gitserver ব্যাবহার করছি যেখানে আমরা গিট ইউজার এবং রিপোজিটরি তৈরি করলাম। যদি আপনি ইন্টারনালি ব্যাবহার করেন এবং গিট সার্ভার এর জন্য DNS তৈরি করেন সার্ভার কে পয়েন্ট করার জন্য তাহলে আপনি কমান্ড গুলো অনেকটা এরকম ভাবে লিখতে পারেন (ধরে নিচ্ছি প্রোজেক্ট এর নাম myproject)
				
					# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
				
			
এখন অন্য সবাই ক্লোন করতে পারবে এবং তাদের কাজগুলো push করতে পারবে সহজেই।
				
					$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
				
			
এই মাধ্যমে আপনি খুব সহজেই একটি গিট read/write সার্ভার তৈরি করতে পারবেন আপনার ডেভলপারদের জন্য।

এখানে আপনার একটি বিষয় নোট করবেন, এখন এই সকল গিট ইউজার সার্ভার এ লগিন করতে পারবে এবং শেল ব্যাবহার করতে পারবে। যদি আপনি তাদেরকে রেসট্রিক্ট করতে চান তাহলে শেল কে পরিবর্তন করতে হবে /etc/passwd ফাইল এ।

আপনি খুব সহজেই git-shell টুল ব্যাবহার করে গিট ইউজার দের কে রেসট্রিক্ট করতে পারবেন যেখানে গিট ইউজার শুধু মাত্র গিট সম্পর্কিত কাজ করতে পারবে। যদি আপনি গিট ইউজার একাউন্ট লগিন শেল সেট আপ করেন তাহলে ওই একাউন্ট সার্ভার এর নরমাল অ্যাক্সেস পাবে না। এর জন্য ওই সব একাউন্ট লগিন এর জন্য git-shell ব্যাবহার করতে হবে bash অথবা csh এর পরিবর্তে। এটা করার জন্য আপনাকে অবশ্যই প্রথমে গিট শেল কমান্ড এর সম্পুর্ন পাথ এর নাম যোগ করতে হবে /etc/shells ফাইল এ, যদি আগে থেকে যোগ করা না থাকে।
				
					$ cat /etc/shells   # see if git-shell is already in there. If not...
$ which git-shell   # make sure git-shell is installed on your system.
$ sudo -e /etc/shells  # and add the path to git-shell from last command
				
			

এখন আপনি একটি ইউজার এর জন্য শেল এডিট করতে পারবেন  chsh <username> -s <shell>:  ব্যাবহার করে।

				
					$ sudo chsh git -s $(which git-shell)
				
			

এখন গিট ইউজার রা SSH কানেকশন ব্যাবহার করে গিট রিপজিটরিতে pushএবং pull করতে পারবেন কিন্তু সার্ভার এর শেল এর অ্যাক্সেস পাবে না। যদি চেষ্টা করে তাহলে লগিন রিজেক্ট এরর দেখাবে এরকম

				
					$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
				
			

এই অবস্থায় ইউজার রা এখনো SSH পোর্ট ব্যাবহার করে গিট সার্ভার অ্যাক্সেস করতে পারবে। যদি আপনি এখানে রেসট্রিক্ট করতে চান তাহলে authorized_keys ফাইল টি এডিট করে প্রত্যেক কি এর শেষ এ নিচের অপশন গুলো যোগ করে দেবেন।

				
					no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
				
			

রেজাল্ট টা দেখতে এই রকম হবে

				
					$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...

				
			
এখন গিট এর নেটওয়ার্ক কমান্ড গুলো কাজ করবে কিন্তু ইউজাররা শেল এর অ্যাক্সেস পাবে না। সর্বোপরি রেজাল্ট হল, আপনি একজন ইউজার এর গিট হোম ডিরেক্টরি তে একটি ডিরেক্টরি সেট আপ করতে পারবেন যেটি git-shell কমান্ড কে কিছুটা কাস্টমাইজ করবে। উদাহরণস্বরূপ , আপনি সার্ভার এ গিট এর কমান্ডগুলোর উপরেও রেস্ট্রিকশন বসাতে পারবেন অথবা ইউজার যেই মেসেজ গুলো দেখে সেগুলোকেও মডিফাই করতে পারবেন যদি তারা এভাবে SSH ব্যাবহার করেন। শেল কাস্টমাইজ সম্পর্কে আরও বিস্তারিত জানতে git help shell এই কমান্ড টি রান করে দেখতে পারবেন।