কোন ব্যক্তিগত কী ব্যবহার করবেন তা গিটকে কীভাবে বলবেন?


645

ssh-iঅনুমোদনের সময় কোন ব্যক্তিগত কী ফাইলটি ব্যবহার করতে হবে তা বলার বিকল্প রয়েছে :

-i identity_file

    একটি ফাইল নির্বাচন করে যা থেকে আরএসএ বা ডিএসএ প্রমাণীকরণের জন্য পরিচয় (প্রাইভেট কী) পড়ে। ডিফল্ট ~/.ssh/identityপ্রোটোকল সংস্করণ 1 এর, এবং ~/.ssh/id_rsaএবং ~/.ssh/id_dsaপ্রোটোকল সংস্করণ জন্য 2. পরিচয় ফাইলগুলি কনফিগারেশন ফাইলের মধ্যে প্রতি হোস্ট ভিত্তিতে নির্দিষ্ট করা যেতে পারে। একাধিক -iবিকল্প (এবং কনফিগারেশন ফাইলগুলিতে একাধিক পরিচয় নির্দিষ্ট করা) পাওয়া সম্ভব।

ডিরেক্টরিতে gitএকাধিক প্রাইভেট কী সহ কোন প্রাইভেট কী ফাইলটি ব্যবহার করতে হবে তা বলার মতো উপায় আছে ~/.ssh?



2
এছাড়াও সম্পর্কিত সার্ভারফল্ট
১৯৯6767

উত্তর:


670

ইন ~/.ssh/config, যোগ করুন:

host github.com
 HostName github.com
 IdentityFile ~/.ssh/id_rsa_github
 User git

এখন আপনি করতে পারেন git clone git@github.com:username/repo.git

দ্রষ্টব্য: যাচাই করুন যে আইডেন্টিটি ফাইলে অনুমতিগুলি 400 টি। এটি কেবল কোনও শংসাপত্র প্রত্যাখানের মতো দেখাবে। এক্ষেত্রে সমাধানটি হ'ল:

chmod 400 ~/.ssh/id_rsa_github

117
আপনার যদি একই কী হোস্টের সাথে বিভিন্ন কীগুলির সাথে সংযোগ স্থাপনের প্রয়োজন হয়?
ভ্যালেন্টিন ক্লিংহামার

6
@ কিয়েলটেক্সটফ্যাব্রিক - আপনি একটি পৃথক হোস্টের সাথে অন্য একটি বিভাগ যুক্ত করতে পারেন: নারডারটিটি ডটকম
বেন চ্যালেঞ্জার

1
ক্লিফ নপ, আমার ম্যানেজে: " HostName: লগ ইন করতে আসল হোস্টের নামটি উল্লেখ করে। এটি হোস্টের ডাক নাম বা সংক্ষিপ্তকরণ নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।" আমার ssh সংস্করণটি openssh-6.7p1।
গ্রিসিওম

11
কনফিগারেশন ফাইলটি যদি নতুন হয় তবে করতে ভুলবেন নাchmod 600 ~/.ssh/config
Elysch

2
@ ভ্যালেন্টিনক্লিংহ্যামার @ ফ্লিমের উত্তরগুলির মধ্যে এই প্রশ্নের সমাধান রয়েছে। এটি core.sshCommandগিট কনফিগারেশন ব্যবহার করা হয়। superuser.com/a/912281/162466
ভাস্যনাভিকভ

345

পরিবেশ পরিবর্তনশীল GIT_SSH_COMMAND:

গিট সংস্করণ ২.৩.০ থেকে আপনি পরিবেশের পরিবর্তনশীলটি ব্যবহার করতে পারেন GIT_SSH_COMMAND:

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone example

মনে রাখবেন যে -iকখনও কখনও আপনার কনফিগার ফাইল দ্বারা ওভাররাইড করা যায়, এক্ষেত্রে আপনার এসএসএইচকে একটি খালি কনফিগারেশন ফাইল দেওয়া উচিত:

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git clone example

কনফিগারেশন core.sshCommand:

গিট সংস্করণ ২.১০.০ থেকে আপনি এই প্রতি রেপো বা বিশ্বব্যাপী কনফিগার করতে পারেন, সুতরাং আপনাকে পরিবেশের পরিবর্তনশীল আর সেট করতে হবে না!

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push

1
এই কাজটি করার জন্য আমাকে শেল ভেরিয়েবলটি একটি পরিবেশের ভেরিয়েবলে রফতানি করতে হয়েছিল export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example", তারপরেgit clone example
আব্দুল

7
বাশ ইন অ্যাবডুল, কমান্ডের মতো একই লাইনে অ্যাসাইনমেন্টটি করা ঠিক সেই কমান্ডের জন্য পরিবেশ পরিবর্তনশীল রফতানি করে। এটি ব্যবহার করে দেখুন: example=hello /usr/bin/env | grep example
ফ্লিম

3
কিছু আরও ভাল হয়ে গিয়েছ, গীত 2.10 থেকে আপনি আপনার Git কনফিগারেশনে কমান্ড সংরক্ষণ করতে পারেন: stackoverflow.com/a/38474220/520162
eckes

2
ইউএনএক্স /dev/null-এর মতো অপারেটিং সিস্টেমে @ নাইটিডার্টটি কেবলমাত্র একটি বৈধ ফাইলের নাম, এটি উইন্ডোজে কাজ করে না।
ফ্লাইম

2
আমার জন্য GIT_SSH_COMMANDনা হওয়া পর্যন্ত আমি ব্যবহৃত কাজ করে নি IdentitiesOnlyএমন এই কমান্ড হিসাবে: GIT_SSH_COMMAND="ssh -i ~/.ssh/mysubdir/id_rsa -o 'IdentitiesOnly yes'" git push
টাইলার কলিয়ার

111

নেই কোন সরাসরি পথ বলতে git, যা ব্যক্তিগত কী ব্যবহার করতে হয়েছে কারণ এটি উপর নির্ভর sshসংগ্রহস্থলের প্রমাণীকরণের জন্য। তবে আপনার লক্ষ্য অর্জনের আরও কয়েকটি উপায় রয়েছে:

বিকল্প 1: ssh-agent

আপনি ssh-agentনিজের ব্যক্তিগত কীটি সাময়িকভাবে অনুমোদিত করতে ব্যবহার করতে পারেন ।

উদাহরণ স্বরূপ:

$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'

বিকল্প 2: GIT_SSH_COMMAND

GIT_SSH_COMMANDএনভায়রনমেন্ট ভেরিয়েবল (গিট ২.৩.০+) ব্যবহার করে ssh আর্গুমেন্টগুলি পাস করুন ।

উদাহরণ স্বরূপ:

$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
  git clone user@host

আপনি এগুলি সমস্ত এক লাইনে টাইপ করতে পারেন - উপেক্ষা করুন $এবং এটিকে ছেড়ে যান \

বিকল্প 3: GIT_SSH

GIT_SSHবিকল্প sshবাইনারি নির্দিষ্ট করতে এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে ssh আর্গুমেন্টগুলি পাস করুন ।

উদাহরণ স্বরূপ:

$ echo 'ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH='./ssh' git clone user@host

দ্রষ্টব্য: উপরের লাইনগুলি শেল (টার্মিনাল) কমান্ড লাইন যা আপনাকে আপনার টার্মিনালে পেস্ট করতে হবে। তারা নামের একটি ফাইল তৈরি করবে ssh, এটি কার্যকর করতে সক্ষম করবে এবং (অপ্রত্যক্ষভাবে) এটি কার্যকর করবে।

দ্রষ্টব্য: GIT_SSHv0.99.4 (2005) থেকে উপলব্ধ

বিকল্প 4: ~/.ssh/config

~/.ssh/configআপনার ব্যক্তিগত কী এর অবস্থান নির্দিষ্ট করার জন্য অন্যান্য উত্তরে প্রস্তাবিত ফাইলটি ব্যবহার করুন eg

Host github.com
  User git
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa

1
//, ssh-এজেন্টে আপনার পরিচয় যদি এই প্রশ্নে ফরোয়ার্ড করা হয় তবে কী হবে? superuser.com/questions/971732/…
নাথান বাসানিজ

1
আমি এই পোস্টটি পুনরায় ফর্ম্যাট করার অনুমতি দিয়েছি: আইএমও এটি এখন পর্যন্ত সবচেয়ে ব্যাপক উত্তর। এর মূল নকশায়, একটি দ্রুত স্ক্যান পোস্টটির পরামর্শ দেয় যেখানে সমস্যাটির একক জটিল সমাধানের বর্ণনা দেওয়া হয়েছে, তাই আমি এটি মিস করেছি।
আলবার্তো

3
$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'আমার জন্য কাজ যখন অন্য কিছুই না। যশ।
ড্যানিয়েল ডিহার্স্ট

1
আমাকে ~/.ssh/configপদ্ধতিটি ব্যবহার করতে হয়েছিল , এনভি
ভার্সগুলি

1
GIT_SSHv0.99.4 (আগস্ট 2005) থেকে পাওয়া যায় , তাই মূলত গিটটি উপস্থিত হওয়ার পরে (এপ্রিল 2005)।
ডোমিনিক

32

এমন কোনও স্ক্রিপ্ট লিখুন যা sshআপনার ইচ্ছা মতো আর্গুমেন্টগুলির সাথে কল করে এবং স্ক্রিপ্টের ফাইলের নামটি putুকিয়ে দেয় $GIT_SSH। অথবা আপনার কনফিগারেশনটি কেবল এতে প্রবেশ করুন ~/.ssh/config


2
এটি কীভাবে করা যায় তার আরেকটি ব্যাখ্যা
সিথসু

1
~/.ssh/configকি যেতে উপায়।
hek2mgl

আমি এমন একটি মেশিনে কাজ করি (এ) যা থেকে আমি একটি সার্ভারের কাছে ধাক্কা খাই (বি) যা কেবল ssh কী প্রমাণীকরণ গ্রহণ করে। আমি যখন machine মেশিনে সরাসরি কাজ করি তখন আমার ~ / .ssh / কনফিগারেশন সেটআপটি পুরোপুরি ঠিকঠাক কাজ করে , যখন আমি অন্য কোনও অবস্থান (সি) থেকে লগইন করি না তখন তা হয় না। ব্যবহার $GIT_SSHএবং একটি স্ক্রিপ্ট এই সমস্যার সমাধান করে। ধন্যবাদ!
বিসুমিরাক

18

আপনি যখন প্রতি বার গিট চালানোর সময় পরিবেশের ভেরিয়েবলগুলি নির্দিষ্ট করতে না চান, অন্য একটি মোড়ক স্ক্রিপ্ট চান না, এসএসএইচ-এজেন্ট (1) চালাতে / চালাতে পারবেন না, কেবল এই জন্য অন্য কোনও প্যাকেজ ডাউনলোড করতে চান না, গিটটি ব্যবহার করুন -রেট-এক্সট (1) বাহ্যিক পরিবহন:

$ git clone 'ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git'
Cloning into 'repository'
(...)
$ cd repository
$ git remote -v
origin  ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git (fetch)
origin  ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git (push)

আমি এই সমাধানটিকে উচ্চতর বিবেচনা করি কারণ:

  • এটি সংগ্রহস্থল / দূরবর্তী নির্দিষ্ট
  • মোড়ক স্ক্রিপ্ট ব্লাট এড়ান
  • এসএসএইচ এজেন্টের দরকার নেই - আপনি যদি অনুপযুক্ত ক্লোনগুলি / ধাক্কা / টান চান (যেমন ক্রোনটিতে) চান তবে দরকারী
  • অবশ্যই, কোনও বাহ্যিক সরঞ্জামের প্রয়োজন নেই

2
এই উত্তরটি হ'ল ঠিক যা ছিল আমার gitব্যক্তিগত গিথুব সংগ্রহস্থলগুলি থেকে ক্লোন / আনার জন্য সংগ্রহস্থল-নির্দিষ্ট ডিপ্লোয়মেন্ট কীগুলি ব্যবহার করার জন্য শেফের সংস্থানকে বাধ্য করার জন্য আমার প্রয়োজন ছিল । পরিবেশ / স্ক্রিপ্ট ভিত্তিক বিষয়গুলির উপরে এই পদ্ধতির অতিরিক্ত সুবিধা হ'ল যেহেতু কী-পাথটি ওয়ার্কিং-রেপোর কনফিগারেশনে এনকোড করা হয়েছে, এটি প্রাথমিক ক্লোন এবং পরবর্তী ফলকগুলি / পুশ উভয় ক্ষেত্রে একই কী ব্যবহার করবে।
অ্যাডাম ফ্রাঙ্কো

2
কি দারুন! এটি ঠিক দুর্দান্ত, এই সম্পর্কে জানতেন না। উত্তরের জন্য ধন্যবাদ, পুতুল পরিবেশে বেশ সহায়ক, .ssh/configইত্যাদি পরিচালনা করতে অতিরিক্ত ঝামেলা রোধ করতে +1!
gf_

1
এই দ্রষ্টব্য - - রিসার্সিভ পতাকার সাথে একসাথে কাজ করে না। সাব-মডিউলগুলি নির্দিষ্ট কীটি ব্যবহার করে আনা হয় না এবং এর জন্য যদি তাদের লেখার প্রয়োজন হয় তবে ব্যর্থ হয়।
ড্যানিয়েল টেস্টা

1
প্রতিটি সাবমডিউল একটি সম্পূর্ণ আলাদা সংগ্রহস্থল, যার নিজস্ব রিমোটগুলির সেট রয়েছে। আপনার সুবিধার জন্য এগুলি গিট দ্বারা একসাথে আটকানো হয়েছে, তবে কোনও উপ-মডুলের রিমোটগুলি প্যারেন্ট রিপোজিটরির সাথে আবদ্ধ নয়। আমি আশঙ্কা করছি যে কাজ করতে পিতামাতার পুনঃবিশ্বাসের জন্য প্রতিটি সাবমোডিয়ালে extপরিবহণ ব্যবহার করে আপনাকে অবশ্যই রিমোটটি সেট করতে হবে ।
ফ্ল্যাভিভগুলি

2
যদি আপনি নিম্নলিখিত ত্রুটির মুখোমুখি হন তবে আপনাকে এর fatal: transport 'ext' not allowedমাধ্যমে এক্স প্রোটোকলটি হোয়াইটলিস্ট করতে হবে export GIT_ALLOW_PROTOCOL=ext। মূলত, গিট-রিমোট-এক্সট রিমোট হেল্পার (যা "ext :: ssh উদাহরণ.com% S foo / repo" URL গুলি সমর্থন করে) স্বেচ্ছাসেবক কমান্ড কার্যকর করার অনুমতি দেয়। এটি সাধারণত কোনও উদ্বেগের বিষয় নয় কারণ ব্যবহারকারীরা সর্বদা তাদের গিটারে পাস হওয়া URL টি দেখে এবং বিশ্বাস করে। তবে গিট সাবমডিউলগুলি .gitmodules ফাইলের মাধ্যমে কোনও আক্রমণকারীকে ক্লায়েন্টকে স্বেচ্ছাসেবী গিট URL গুলি আনার জন্য অনুমতি দেয়। hackerone.com/reports/104465
গমিনো

18

এতে কাস্টম হোস্ট কনফিগারেশন ব্যবহার করুন ~/.ssh/config:

Host gitlab-as-thuc  
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa.thuc
    IdentitiesOnly yes

তারপরে আপনার কাস্টম হোস্টনামটি ব্যবহার করুন:

git remote add thuc git@gitlab-as-thuc:your-repo.git  

2
বাড়ি এবং কাজের জন্য আমার পৃথক গিটহাব অ্যাকাউন্ট রয়েছে বলে এটি আমি উত্তরটি খুঁজছিলাম। আমি কেবল সেট করতে Host work.github.com HostName github.com IdentityFile ~/.ssh/workহয়েছিল এবং তারপরে যখনই আমি কোনও কাজের সংগ্রহস্থল ক্লোন করি তখন "work.github.com" দ্বারা "github.com" প্রতিস্থাপন করতে পারি। এটি এখনও "github.com" এর সাথে সংযোগ স্থাপন করে তবে একটি অ-ডিফল্ট কী জুটি ব্যবহার করে।
মিক্কেল 25'16

1
বিশদগুলির জন্য ইউআরএল (" itblog.study.land / ..." ) আর কাজ করে না :(
কার্ল স্মট্রিকz

: @CarlSmotricz মূল এখানে সরিয়ে নেওয়া হয়েছে medium.com/@thucnc/...
thucnguyen

4
অবশেষে !!! এই উত্তরটি প্রকৃতপক্ষে দেখায় যে আপনি কী ~/.ssh/configফাইলটিতে রেখেছেন তা কীভাবে কাজে লাগাতে পারেন । আপনি যখন উত্স যুক্ত করবেন তখন কীভাবে আপনি হোস্টটি সেট করতে পারবেন তা অন্য প্রতিটি উত্তরের হাতছাড়া হয় যা গিটকে স্বয়ংক্রিয়ভাবে সঠিক কী ফাইলটি ব্যবহার করার অনুমতি দেয়। ধন্যবাদ!!
ব্রায়ানভিপিএস 15

1
ভাল লাগছিল, আমি যা
দেখছিলাম

15

আমার লড়াইয়ের পরে আমি আমার $GIT_SSHজন্য যা কাজ করেছি তা ভাগ করে নিতে চাই।

আমার উদাহরণগুলির মাধ্যমে আমি ধরে নেব যে আপনার কাছে আপনার ব্যক্তিগত কী রয়েছে/home/user/.ssh/jenkins

এড়াতে ত্রুটি: GIT_SSH মান বিকল্পগুলি অন্তর্ভুক্ত করে

$ export GIT_SSH="ssh -i /home/user/.ssh/jenkins"

বা অনুরূপ যা কিছু ব্যর্থ হবে, যেমন গিট একটি ফাইল হিসাবে মানটি চালানোর চেষ্টা করবে । যে কারণে, আপনাকে একটি স্ক্রিপ্ট তৈরি করতে হবে।

Working GIT_SSH স্ক্রিপ্টের কার্যকারী উদাহরণ /home/user/gssh.sh

স্ক্রিপ্টটি নিম্নলিখিতভাবে ডাকা হবে:

$ $GIT_SSH [username@]host [-p <port>] <command>

নমুনা স্ক্রিপ্ট কাজ করে দেখতে পারে:

#!/bin/sh
ssh -i /home/user/.ssh/jenkins $*

$*শেষে নোট করুন , এটি এর গুরুত্বপূর্ণ অংশ।

এমনকি নিরাপদ বিকল্প, যা আপনার ডিফল্ট কনফিগারেশনের ফাইলের সাথে যে কোনও সম্ভাব্য দ্বন্দ্বকে আটকাতে পারে (ব্যবহারের জন্য বন্দরটি স্পষ্টভাবে উল্লেখ করা) হ'ল:

#!/bin/sh
ssh -i /home/user/.ssh/jenkins -F /dev/null -p 22 $*

স্ক্রিপ্টটি অনুমান করে /home/user/gssh.sh, আপনি তারপর:

$ export GIT_SSH=/home/user/gssh.sh

এবং সমস্ত কাজ করবে।


ধন্যবাদ। কেবলমাত্র দ্রষ্টব্য: আর্গুমেন্টের সাদা অংশ থাকলে আর্গুমেন্টের পাসের মাধ্যমে আর্গুমেন্টের জন্য $ * এর পরিবর্তে "$ @" ব্যবহার করুন former
পাইওটার ফাইন্ডেন

আপনার নোটের জন্য ধন্যবাদ তবে, আমি এটি পুরোপুরি বুঝতে পারি না - zsh এ এটি আমাকে এক টুকরোতে স্থান দিয়ে স্ট্রিংগুলি রাখতে সহায়তা করে, তবে ব্যাশে নয়। আপনি আমাকে আরও বলতে পারেন বা কিছু ব্যাখ্যা করতে পারেন? আমি অন্ধভাবে কিছু পরিবর্তন যোগ করতে চাই না।
জান ভি্লকিনস্কি 10

আপনার উত্তরের প্রথম অর্ধটি অপসারণ করা উচিত। যে কাজ করে না এমন সমাধানে কারও আগ্রহী নয় এবং নীচে সঠিক উত্তরটি অবিস্মরণীয়ভাবে কাজ করে এমনটি পড়ে এটি অপচয় করা।
সেরিন

@ সেরিন আপনি যদি বোঝাতে চান "এড়াতে ত্রুটি" আমি এটি সেখানে রাখছি। এটি এড়াতে সাধারণ ক্ষতি ভাগ করে নেয় এবং এটি খুব কম। আমি নিশ্চিত, কেউ পরিবর্তনকে সমস্ত জিনিস সরবরাহ করে সমাধানটিকে অনুকূল করার চেষ্টা করবে (এটি আমার কাছে হয়েছিল), তাই আমি সাফল্যের পথটি ছোট করার চেষ্টা করেছি।
জান ভ্লকিনস্কি

5

আপনি নিজের র‌্যাপার তৈরির পরিবর্তে কেবল এসএস-আইডেন্টি ব্যবহার করতে পারেন।

আপনি এখানে আরও পড়তে পারেন: https://github.com/ccontavalli/ssh-ident

এটি একবারে একাধিক লগইন সেশন, এক্সটার্মস বা এনএফএস ভাগ করে নেওয়া বাড়ির সাথে সাথে প্রথম প্রয়োজন হলে এসএসএস কী লোড করে।

একটি ক্ষুদ্রতর কনফিগারেশন ফাইলের সাহায্যে এটি আপনার কী প্রয়োজন তা নির্ভর করে স্বয়ংক্রিয়ভাবে বিভিন্ন কীগুলি লোড করতে এবং এটিকে আলাদা এজেন্টে (এজেন্ট ফরওয়ার্ডিংয়ের জন্য) আলাদা রাখতে পারে।


5

আমার একটি ক্লায়েন্ট ছিল যার পৃথক গিথুব অ্যাকাউন্ট প্রয়োজন। সুতরাং আমার এই একটি প্রকল্পের জন্য একটি পৃথক কী ব্যবহার করা দরকার।

আমার সমাধানটি এটি আমার .zshrc / .bashrc এ যুক্ত করা ছিল:

alias infogit="GIT_SSH_COMMAND=\"ssh -i ~/.ssh/id_specialkey\" git $@"

যখনই আমি এই প্রকল্পের জন্য গিট ব্যবহার করতে চাই আমি গিটের সাথে "ইনফোগিট" প্রতিস্থাপন করি:

infogit commit -am "Some message" && infogit push

আমার জন্য এটি মনে রাখা আরও সহজ।


4

সুতরাং আমি GIT_SSH এনভ ভেরিয়েবলকে এতে সেট করেছি $HOME/bin/git-ssh

আমার রেপো কনফিগারেশনটি সমর্থন করার জন্য কোন ssh পরিচয় ব্যবহার করা উচিত, আমার ~/bin/git-sshফাইলটি হ'ল:

#!/bin/sh
ssh -i $(git config --get ssh.identity) -F /dev/null -p 22 $*

তারপরে আমার কাছে গ্লোবাল গিট কনফিগারেশন সেটিংস রয়েছে:

$ git config --global ssh.identity ~/.ssh/default_id_rsa

এবং যে কোনও গিট সংগ্রহস্থলের মধ্যে আমি কেবল একটি স্থানীয় ssh.identityগিট কনফিগার মান নির্ধারণ করতে পারি :

$ git config --local ssh.identity ~/.ssh/any_other_id_rsa

ভাল খবর!

প্রতিটি পরিচয়ের জন্য যদি আপনার আলাদা ইমেল ঠিকানা থাকতে পারে তবে এটি আরও সহজ হয়ে যায়, কারণ আপনি নিজের ইমেল ঠিকানাগুলির পরে নিজের কীগুলির নাম রাখতে পারেন এবং তারপরে git কনফিগারেশনের ব্যবহারকারীর ইমেলটি কী নির্বাচন করতে ~/bin/git-sshপারে:

#!/bin/sh
ssh -i $HOME/.ssh/$(git config --get user.email) -F /dev/null -p 22 $*

2

আমার সমাধানটি হ'ল:

একটি স্ক্রিপ্ট তৈরি করুন:

#!/bin/bash
KEY=dafault_key_to_be_used
PORT=10022 #default port...
for i in $@;do
   case $i in
    --port=*)
        PORT="${i:7}";;
    --key=*)KEY="${i:6}";;
   esac
done
export GIT_SSH_COMMAND="ssh -i $HOME/.ssh/${KEY} -p ${PORT}"
echo Command: $GIT_SSH_COMMAND

তারপরে আপনাকে যখন ভের রানটি পরিবর্তন করতে হবে:

. ./thescript.sh [--port=] [--key=]

অতিরিক্ত বিন্দু ভুলবেন না !! এই স্ক্রিপ্ট পরিবেশের সেট সেট করে তোলে !! --key এবং --port alচ্ছিক।


2

সাধারণত, আপনি এটির জন্য ব্যবহার করতে চান ~/.ssh/config। আপনি যে কীগুলি ব্যবহার করতে চান তার সাথে কেবল সার্ভারের ঠিকানাগুলি জোড়া দিন:

Host github.com
  IdentityFile ~/.ssh/id_rsa.github
Host heroku.com
  IdentityFile ~/.ssh/id_rsa.heroku
Host *
  IdentityFile ~/.ssh/id_rsa

Host *যে কোনও সার্ভারকে বোঝায়, তাই আমি এটি ব্যবহারের ~/.ssh/id_rsaজন্য ডিফল্ট কী হিসাবে সেট করতে ব্যবহার করি।


2

আমি @ শেলহোলিক এবং কয়েকটি তেঁতুল দিয়ে এই এস থ্রেড তৈরি করি। আমি গিটহাবকে উদাহরণ হিসাবে ব্যবহার করেছি এবং ধরে নিই যে আপনার একটি ব্যক্তিগত কী আছে ~/.ssh/github(অন্যথায়, এই এসও থ্রেডটি দেখুন ) এবং আপনি নিজের গিটহাব প্রোফাইলে পাবলিক কী যুক্ত করেছেন (অন্যথায় গিটহাবের সহায়তা দেখুন )।

প্রয়োজনে একটি নতুন এসএসএইচ কনফিগারেশন ফাইল তৈরি করুন ~/.ssh/configএবং অনুমতিগুলিকে 400 এ পরিবর্তন করুন

touch ~/.ssh/config
chmod 600 ~/.ssh/config

এটি ~/.ssh/configফাইলটিতে যুক্ত করুন:

Host github.com
    IdentityFile ~/.ssh/github
    IdentitiesOnly yes

আপনার যদি ইতিমধ্যে একটি রিমোট সেটআপ থাকে, আপনি এটি মুছতে চাইতে পারেন, অন্যথায় আপনাকে এখনও ব্যবহারকারীর নাম এবং পাসওয়ার্ডের জন্য অনুরোধ করা যেতে পারে:

git remote rm origin

তারপরে গিট সংগ্রহস্থলে একটি রিমোট যুক্ত করুন এবং ব্যবহারকারীর নামের আগে কোলনটি লক্ষ্য করুন:

git remote add origin git@github.com:user_name/repo_name.git

এবং তারপরে গিট কমান্ডগুলি স্বাভাবিকভাবে কাজ করে, যেমন:

git push origin master
git pull origin 

@ হেওয়াওয়াচ এই এসও থ্রেডটিতেIdentitiesOnly yes প্রতিটি প্রোটোকলের জন্য ডিফল্ট ফাইলের সাথে মিল থাকা পরিচয় ফাইল প্রেরণের এসএসএইচ ডিফল্ট আচরণকে রোধ করার জন্য যুক্ত করার পরামর্শ দেওয়া হয়েছে। আরও তথ্য এবং রেফারেন্সের জন্য সেই থ্রেডটি দেখুন।


এটি আমার ভুল ছিল: "আপনার যদি ইতিমধ্যে একটি রিমোট সেটআপ থাকে ..."। অনেক ধন্যবাদ!!!
অ্যালান আন্দ্রেড

সাধারণ ভুল --- এই উত্তর
গড্ডার্ড

1

শুধু ব্যবহার ssh-agentএবং ssh-addআদেশ।

# create an agent
ssh-agent

# add your default key
ssh-add ~/.ssh/id_rsa

# add your second key
ssh-add ~/.ssh/<your key name>

উপরের কমান্ডগুলি কার্যকর করার পরে, আপনি উভয় কী একই সাথে ব্যবহার করতে পারেন। লিখো

git clone git@github.com:<yourname>/<your-repo>.git

আপনার ভান্ডার ক্লোন করতে।

আপনি আপনার মেশিনটি রিবুট করার পরে উপরের কমান্ডটি কার্যকর করতে হবে।


দয়া করে কীভাবে আমি কোনও এজেন্ট তৈরি করতে পারি তা সহ প্রক্রিয়াটি ব্যাখ্যা করুন
শ্রীকৃষ্ণ

0

আমি গিট সংস্করণ ২.১। ব্যবহার করছি এবং আমার কোনও একক স্ক্রিপ্টের প্রয়োজন নেই এমনকি কনফিগার বা পরিবর্তিত কমান্ডও নেই।

  • সবেমাত্র আমার প্রাইভেট কীটি .ssh / id_rsa এ অনুলিপি করেছেন
  • অনুমতি 600 সেট করুন

এবং গিটটি স্বয়ংক্রিয়ভাবে কীতে পড়ে। আমি কিছু জিজ্ঞাসা করি না এবং এটি কোনও ত্রুটি ফেলে না। ঠিক কাজ করে।


আপনি কি লক্ষ্য করেছেন যে প্রশ্নটি " ~/.sshডিরেক্টরিতে একাধিক ব্যক্তিগত কীযুক্ত একটি সিস্টেম" সম্পর্কে ?
স্কট

0

যদিও প্রশ্নটি এটির অনুরোধ করে না, আমি অন্য যে কেউ একই সমস্যাটি সমাধান করার জন্য বিশেষভাবে জন্য এই

গিটল্যাব সমাধান

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

~/myrepo> git mycommit -m "Important Stuff"
~/myrepo> git mypush
[proceed to enter passphrase for private key...]

সেটআপ

আমার ক্ষেত্রে আপনার এর অবস্থানটি মনে করুন all/myfolder/.ssh/my_gitlab_id_rsa

এতে একটি এন্ট্রি যুক্ত করুন ~/.ssh/config:

Host gitlab-delegate
    HostName gitlab.mydomain.com
    User git
    IdentityFile /myfolder/.ssh/my_gitlab_id_rsa
    IdentitiesOnly yes

যোগ মধ্যে ~/.gitconfig:

mypush = "!f() { \
           path=$(git config --get remote.origin.url | cut -d':' -f2); \
           branch=$(git rev-parse --abbrev-ref HEAD); \
           git remote add gitlab_as_me git@gitlab-delegate:$path && \
           git push gitlab_as_me $branch && \
           git pull origin $branch; \
           git remote remove gitlab_as_me; \
         }; f"

বোনাস হিসাবে, আমি এই সাথে একটি নির্দিষ্ট ব্যবহারকারী হিসাবে একই হোস্টটিতে আমার প্রতিশ্রুতিগুলি সম্পাদন করি :

mycommit = "!f() { \
             git -c "user.name=myname" -c "user.email=myname@mysite.com" commit \"$@\"; \
           }; f"

ব্যাখ্যা

উপরের সমস্ত অনুমান করে যে সম্পর্কিত রিমোট originএবং প্রাসঙ্গিক শাখাটি বর্তমানে চেক আউট করা হয়েছে। রেফারেন্সের জন্য আমি কয়েকটি আইটেমগুলিতে দৌড়েছি যেগুলির ঠিকানা দেওয়া দরকার:

  • সমাধানটির জন্য একটি নতুন রিমোট তৈরি করা দরকার gitlab_as_me, এবং আমার লগ ট্রিটিতে অতিরিক্ত রিমোটটি ঝুলন্ত দেখতে পছন্দ করি না তাই শেষ হয়ে গেলে আমি এটিকে সরিয়ে ফেলি remove
  • রিমোটটি তৈরি করতে, ফ্লাইতে রিমোটের ইউআরএল তৈরি করার প্রয়োজন রয়েছে - গিটল্যাবের ক্ষেত্রে এটি সাধারণ বাশ দ্বারা অর্জন করা হয়েছিল
  • কোন ধাক্কা দেওয়ার সময় gitlab_as_meআপনাকে কোন শাখাটি চাপ দিচ্ছে সে সম্পর্কে নির্দিষ্ট হওয়া দরকার
  • পুশ করার পরে আপনার স্থানীয় originপয়েন্টারটি ম্যাচ করার জন্য "আপডেট" করা দরকার gitlab_as_me(এটি git pull origin $branchকরে)

0

যখন আপনার একাধিক গিট অ্যাকাউন্ট থাকে এবং আপনি আলাদা এসএস কী চান

Ssh কী উত্পন্ন করার জন্য আপনাকে একই পদক্ষেপ অনুসরণ করতে হবে তবে আপনি নিশ্চিত হন

ssh-keygen -t ed25519 -C "your-email-id@gmail.com" 

আপনি যে পথটি সংরক্ষণ করতে চান তা প্রবেশ করুন (উদা: আমার-পিসি / ডেস্কটপ / .এসএসএইচ / এডি 25519)

আপনার গিটল্যাবে পাবলিক কী যুক্ত করুন (গিটল্যাজে ssh কী কীভাবে যুক্ত করবেন )

নীচের কমন্ড ব্যবহার করে আপনাকে নতুন এসএসআই পরিচয় দিতে হবে

ssh-add ~/my-pc/Desktop/.ssh/ed25519

(1) আপনি কাউকে বা কিছু উদ্ধৃত করছেন? যদি তা হয় তবে দয়া করে উত্সটি সনাক্ত করুন। যদি তা না হয় তবে দয়া করে উদ্ধৃতি বিন্যাসটি ব্যবহার করবেন না। (2) "ed25519" কি? ……………………………… দয়া করে মন্তব্যে সাড়া দিবেন না;  আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন।
স্কট 0

0
    # start :: how-to use different ssh identity files

    # create the company identity file
    ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
    # save private key to ~/.ssh/id_rsa.corp, 
    cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys

    # create your private identify file
    ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
    # save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
    cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys

    # clone company internal repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@git.in.corp.com:corp/project.git

    export git_msg="my commit msg with my corporate identity, explicitly provide author"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 
    # and verify 
    clear ; git log --pretty --format='%h %ae %<(15)%an ::: %s

    # clone public repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@github.com:acoolprojectowner/coolproject.git

    export git_msg="my commit msg with my personal identity, again author "
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push ; 
    # and verify 
    clear ; git log --pretty --format='%h %ae %<(15)%an ::: %s

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