গিট-এ শেল কমান্ড কার্যকর করার সময় কীভাবে ব্যক্তিগত এসএসএইচ-কে ব্যবহার করবেন তা নির্দিষ্ট করবেন?


1108

সম্ভবত একটি অস্বাভাবিক পরিস্থিতি, তবে আমি স্থানীয় কম্পিউটার থেকে শেল (গিট) কমান্ড কার্যকর করার সময় ব্যবহার করার জন্য একটি প্রাইভেট এসএসএইচ-কি নির্দিষ্ট করতে চাই।

মূলত এটির মতো:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

বা আরও ভাল (রুবিতে):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

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



28
আমি ভাবছি কেন এটি এতটা অস্বাভাবিক যে গিটের -iমতো বিকল্প sshনেই?
নিক টি

29
Git 2.10 (চতুর্থাংশ 3 2016) এর মাধ্যমে, আপনি একটি নতুন কনফিগ আছে: git config core.sshCommand 'ssh -i private_key_file'। দেখুন নিচের আমার উত্তর
VonC

3
আমার মতে, আরেওয়াচ এই উত্তরটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি বর্তমান গিফ্ট কমান্ডের জন্য প্রতিটি গিট কমান্ডের জন্য সাব-শেল করার পরিবর্তে সমস্ত গিট কমান্ডগুলি সেটআপের পরে সাধারণ হিসাবে কার্যকর করতে দেয়।
গরিফিফোবিয়া

উত্তর:


797

এর মতো কিছু কাজ করা উচিত (orip দ্বারা প্রস্তাবিত):

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

আপনি যদি সাবশেলগুলি পছন্দ করেন তবে আপনি নিম্নলিখিতটি চেষ্টা করতে পারেন (এটি আরও ভঙ্গুর হলেও):

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

গিট এসএসএইচকে অনুরোধ করবে যা পরিবেশগত পরিবর্তনশীল অনুসারে এর এজেন্টকে খুঁজে পাবে; এর ফলে, কীটি বোঝা হবে।

বিকল্পভাবে, সেটিংটি কৌতুকও HOMEকরতে পারে, আপনি যদি একটি ডিরেক্টরি সেটআপ করতে ইচ্ছুক থাকেন তবে কেবলমাত্র একটি .sshডিরেক্টরি রয়েছে HOME; এটিতে হয় একটি আইডেন্টিটি.পাব, বা কনফিগার ফাইল সেটিং আইডেন্টিটি ফাইল থাকতে পারে ।


5
তবে এটি কী স্বীকৃত এসএসএইচ-কী হিসাবে স্থায়ীভাবে যুক্ত করবে, তাই না? আমি এটি এড়াতে চাই যাতে ব্যবহারকারী 2 প্রকল্পকারীদের সাথে গণ্ডগোল করতে না পারে। এটি একটি ওয়েব অ্যাপ্লিকেশনের জন্য তাই এটি বিভিন্ন ওএস-ব্যবহারকারীদের ব্যবহার করা ব্যবহারিক নয়, যা সর্বোত্তম বিকল্প হতে পারে।
ক্রিস্টোফার

28
না, যখন গিটটি সম্পূর্ণ হয়, এসএসএল-এজেন্ট সমাপ্ত হয় এবং কীটি ভুলে যায়।
মার্টিন বনাম লুইস

6
এই কমান্ডটি উইন্ডোজ গিট ব্যাশে কাজ করে না। এটি অপ্রত্যাশিত টোকেন 'ssh-add' এর নিকটে সিনট্যাক্স ত্রুটি বলেছে
মোহিত

116
স্থির কমান্ড লাইন (উইন্ডোজ বা লিনাক্সের জন্য) এমন কিছু হবে:ssh-agent bash -c 'ssh-add sshkey; git clone url'
orip

4
ssh-agent $(..)সিনট্যাক্স আমার জন্য কাজ করছে না এবং আমি নই এই নিশ্চিত কাজ কেমন অনুমান হয়: (BA) SH ভিতরে কমান্ডগুলো উচিত $(..)প্যারামিটার হিসাবে আউটপুট প্রথম, SSH-এজেন্ট তারপর চালানো।
জোহানেস 'ফিশ' জিমকে

1199

এই সমাধানগুলির কোনওোটাই আমার পক্ষে কাজ করেনি।

পরিবর্তে, আমি @ মার্টিন বনাম লুইসের এসএসএইচের configজন্য একটি ফাইল স্থাপনের উল্লেখ সম্পর্কে বিস্তারিত বর্ণনা করছি।

এসএসএইচ ব্যবহারকারীর ~/.ssh/configফাইলটি সন্ধান করবে । আমার সেটআপটি এইভাবে রয়েছে:

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

এবং আমি একটি দূরবর্তী গিট সংগ্রহস্থল যুক্ত করেছি:

git remote add origin git@gitserv:myrepo.git

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

git push -v origin master

মন্তব্য

  • IdentitiesOnly yesপ্রয়োজন বোধ করা হয় , SSH ডিফল্ট আচরণ প্রতিরোধ প্রতিটি প্রোটোকল জন্য ডিফল্ট ফাইলের নাম মিলে পরিচয় ফাইল পাঠানোর। আপনার যদি নামের মতো কোনও ফাইল থাকে তবে এই বিকল্পটি ছাড়াই ~/.ssh/id_rsaআপনার আগে চেষ্টা করা হবে ~/.ssh/id_rsa.github

তথ্যসূত্র


17
আমি দেখতে পেয়েছি যে আপনি যখন .ssh / কনফিগারেশন ব্যবহার করে একাধিক কী নির্দিষ্ট করেন, আপনাকে "গিট রিমোট অ্যাড" কমান্ডের অংশ হিসাবে "হোস্ট" লাইনে হোস্ট ফ্রেন্ডের নাম ব্যবহার করতে হবে। যদি লাইনটি "হোস্ট স্টিগ" হয়, তবে আপনাকে গিট রিমোট অ্যাড ব্যবহার করতে হবে <someName> ব্যবহারকারীর @ stg: /path_to_git_repo.git "you গিট দ্বারা বাছাই করা হয়নি Hence তাই, এটি ব্যক্তিগত কী ফাইলটি সঠিকভাবে তুলছে না g আমি একই বিষয়টিকে গিথুব এবং হিরকুতে চাপিয়ে চেষ্টা করেছি এবং যখন আপনি "গিট রিমোট অ্যাড" তে বন্ধুত্বপূর্ণ নাম দিবেন তখনই কাজ করি
গোপীনাথ এমআর

2
গিথুবের হোস্ট সম্পর্কে আমি নিশ্চিত ছিলাম না। আমি এই লিঙ্কটি পেয়েছি: gist.github.com/jexchan/2351996
কার্স্টেন

1
কয়েকটি গিট সংগ্রহস্থলের জন্য কয়েকটি কী ফাইল রাখতে চাইলে এখানে একবার দেখুন
e271p314

1
আপনি Host remote.server.comআসল ইউআরএল ব্যবহার করতে এবং চালিয়ে যেতে পারেন
মোগানআআআআআআরইউ

5
এটি আমার জন্য দুটি পরিবর্তনের পরে কাজ করেছিল। কনফিগারেশন ফাইলটি নতুন হলে করতে ভুলবেন না chmod 600 ~/.ssh/config( এখানে দেখুন )। এবং যদি আপনি গিটহাব ব্যবহার করছেন তবে এর Host gitservসাথে প্রতিস্থাপন করুন Host github.com, বাদ দিন Hostname remote.server.comএবং এর সাথে দূরবর্তী যুক্ত করুন git remote add origin git@github.com:user_name/repo_name.git
মাইগুয়েলমোরিন

478

গিট ২.৩.০ থেকে শুরু করে আমাদের কাছে সহজ কমান্ডও রয়েছে (কোনও কনফিগ ফাইলের প্রয়োজন নেই):

GIT_SSH_COMMAND='ssh -i private_key_file' git clone user@host:repo.git

3
আমি পেতে cannot run ssh -i /home/vagrant/.ssh/git: No such file or directoryযদিও এটি বিদ্যমান 444 Nov 16 18:12 /home/vagrant/.ssh/gitথেকেls -l /home/vagrant/.ssh/git
টেড

3
@ted: chmod 400 / home
যশ

8
সুন্দর এবং সহজ সমাধান। আপনার যদি এটির অনেক কিছু করার দরকার হয় তবে আমি একটি উপনাম তৈরির পরামর্শ দিচ্ছি।
লাসে মায়ার

5
করতে ভুলবেন না chmod 400 <path-to-private-key-file>। অন্যথায় গিট কমান্ড কোনও বিশেষ ত্রুটির বার্তা ছাড়াই ব্যর্থ হতে পারে ...
Eonil

5
যদি উত্তরের -o IdentitiesOnly=yesসাথে নির্দিষ্ট কীটি -iব্যবহার করা হয় (এসএসএইচ এজেন্টের চাবির বিপরীতে) নিশ্চিত হয়ে থাকে তবে এটি উত্তম হবে ।
রবিনস্ট

423

অন্যান্য ব্যক্তিদের পরামর্শ সম্পর্কে ~/.ssh/configঅতিরিক্ত জটিল। এটি হিসাবে সহজ হতে পারে:

Host github.com
  IdentityFile ~/.ssh/github_rsa

30
IdentitiesOnlyআপনারও বিকল্প দরকার ।
Flimm

4
@EnzeChi আপনি রিমোটের নিপূণভাবে ব্যবহার করে একাধিক GitHub অ্যাকাউন্ট থাকতে পারে: git remote add ssh://personal/org/proj.git && git remote add ssh://corporate/org/proj.git। তারপরে আপনি কনফিগারটি দেখে মনে হচ্ছেHost personal HostName github.com ... Host corporate HostName github.com
এমুরি

@ এনজেচি আমি একই জাতীয় কিছু করি যাতে আমি 2 টি আলাদা এসএস কী ব্যবহার করি - একটি আনার জন্য এবং অন্যটি ধাক্কা দেওয়ার জন্য। আনতে কোনও পাসফ্রেজ নেই। ধাক্কা দেয়।
এমরি

144

আমার_গিত_এসএইচ_র্যাপ্টারের সামগ্রী:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

তারপরে আপনি কীটি ব্যবহার করে এটি করতে পারেন:

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git

4
খুব ভাল সমাধান যদি আপনার একই ডোমেনে একাধিক অ্যাকাউন্ট থাকে তবে অন্যান্য সমাধানগুলি ভালভাবে পরিচালনা করে না
বেকা

1
সুন্দর সমাধান। আপনি এটিকে> GIT_SSH = my_git_ssh_wrapper দিয়ে সহজ করতে পারেন; গিট ক্লোন git@github.com: TheUser / TheProject.git
শিব

2
আপনি যখন হোম ডিরেক্টরি ছাড়াই অ্যাকাউন্ট থেকে গিট ব্যবহার করতে চান তখন এই সমাধানটি পরিস্থিতিগুলিও কভার করে।
পাইওট্রেইকর

ফ্যান্টাস্টিক। : আপনিও ব্যক্তিগত সার্ভার থেকে এই ভাবে ব্যবহার করতে পারেনGIT_SSH="git_wrapper" git clone ssh://user@server/path/to/project"
টন

1
এই একমাত্র উপায় যা আমার জন্য সাইগউইন পরিবেশে কাজ করেছিল
চ্যাটারঅন

113

Git সঙ্গে 2.10+ (চতুর্থাংশ 3 2016: মুক্তি সেপ্টেম্বর, 2016 2D), আপনি একটি সেট করতে সম্ভাবনা আছে কনফিগ জন্য GIT_SSH_COMMAND(শুধুমাত্র একটি পরিবেশ পরিবর্তনশীল বর্ণনা অনুযায়ী Rober জ্যাক উইল 'র উত্তর )

দেখুন 3c8ede3 কমিট (26 জুন 2016) দ্বারা গান Nguyễn গান Thái আরো Ngọc গান Duy ( pclouds)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে dc21164 কমিট , 19 জুলাই 2016)

প্রতি সংগ্রহস্থলের core.sshCommandজন্য কী মান ব্যবহার GIT_SSH_COMMANDকরতে হবে তা নির্দিষ্ট করতে একটি নতুন কনফিগারেশন ভেরিয়েবল যুক্ত করা হয়েছে ।

core.sshCommand:

এই পরিবর্তনশীল সেট করা থাকে, তাহলে git fetchgit pushপরিবর্তে নিদিষ্ট কমান্ড ব্যবহার করা হবে sshযখন তারা একটি দূরবর্তী সিস্টেমে সংযোগ করতে হবে।
কমান্ডটি GIT_SSH_COMMANDপরিবেশের পরিবর্তনশীল হিসাবে একই আকারে থাকে এবং পরিবেশ ভেরিয়েবল সেট করা থাকলে ওভাররাইড হয়।

এর অর্থ হ'ল git clone:

cd /path/to/my/repo
git config core.sshCommand 'ssh -i private_key_file' 
# later on
git clone host:repo.git

আপনি এটি কেবল একটি আদেশের জন্য সেট করতে পারেন:

git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git

GIT_SSH_COMMANDপরিবেশের পরিবর্তনশীল নির্ধারণের চেয়ে এটি আরও সহজ , যা উইন্ডোজে, যেমন মতিস কুটি-ক্রেসেকস দ্বারা উল্লিখিত ,

set "GIT_SSH_COMMAND=ssh -i private_key_file"

@ ফ্লিম রিলিজের তারিখগুলি: ক্যালেন্ডার.
google.com

এটি মুক্তি পেয়েছে।
ফ্লিম

4
কাজ করে। ভাবেনদের এটি সেরা উত্তর বিবেচনা করা উচিত। একবার জারি করা হলে, / tmp এর আগে অনুলিপি করা সংস্করণ সহ .git / কনফিগারেশন ফাইলটি পৃথক করা তথ্যমূলক হতে পারে। একটি নতুন এন্ট্রি তৈরি করা হয়েছে: sshCommand = ... এটির মূল্যের জন্য, আমি 'git কনফিগারেশন কোর.এসএইচকম্যান্ড "ssh -i $ হোম / .ssh / প্রাইভেটকিফিল" ব্যবহার করেছি used
দুর্বলপয়েন্টার

1
@ স্পঙ্কি আপনি ইনলাইন কমান্ডটি git -c core.sshCommand="ssh -i private_key_file" clone host:repo.gitতারপরে কনফিগার সেটgit config core.sshCommand 'ssh -i private_key_file'
dav_i

1
এটি অবশ্যই সেরা উত্তর!
ওয়াগনার প্যাট্রিয়োটা

110

উত্তর এবং মন্তব্যগুলি সংক্ষিপ্ত করতে , বিভিন্ন কী ফাইলগুলি ব্যবহার করার জন্য গিট সেটআপ করার সর্বোত্তম উপায় এবং তারপরে এটি ভুলে যান, যা একই হোস্টের জন্য বিভিন্ন ব্যবহারকারীকে সমর্থন করে (যেমন একটি ব্যক্তিগত গিটহাব অ্যাকাউন্ট এবং একটি কাজ), যা উইন্ডোজে কাজ করে পাশাপাশি, সম্পাদনা করা ~/.ssh/config(বা c:\Users\<your user>\.ssh\config) এবং একাধিক পরিচয় নির্দিষ্ট করতে হয়:

Host github.com
HostName github.com
IdentityFile /path/to/your/personal/github/private/key
User dandv

Host github-work
HostName github.com
IdentityFile /path/to/your/work/github/private/key
User workuser

তারপরে, কোনও প্রকল্পটিকে আপনার ব্যক্তিগত ব্যবহারকারী হিসাবে ক্লোন করতে, কেবল নিয়মিত git cloneকমান্ডটি চালান ।

হিসাবে রেপো ক্লোন করতে workuser, চালান git clone git@github-work:company/project.git


3
আমি আপনাকে উজ্জীবিত করেছি কারণ আপনি যা বলেছেন তা সবই উপরের উত্তরগুলিতে এবং আমার চোখে আরও স্পষ্টভাবে আবৃত। উদাহরণস্বরূপ, কেন আপনি যথাক্রমে ই ড্যান্ডভি এবং ওয়ার্কুসার ব্যবহারকারীকে সংজ্ঞায়িত করেন?
hroptatyr

2
আপনি 4 বছরের পুরানো প্রশ্নের উত্তর দিয়েছিলেন কোনও নতুন তথ্য ছাড়াই এবং আপনি দাবি করছেন যে আপনার উত্তরটি "সেরা উপায়"। তবুও আপনি অন্য ব্যবহারকারীদের তাদের উত্তর সরাতে হতাশ এবং ঝামেলা করেছেন ... কেবলমাত্র আপনার উত্তরটি ধাক্কা দেওয়ার জন্য।
রুডিমায়ার

@ ক্রোটাটায়ার: আমি ব্যবহার করেছি dandvএবং workuserআমার উদাহরণটিকে সমর্থন করার জন্য, "যেমন একটি ব্যক্তিগত গিটহাব অ্যাকাউন্ট এবং একটি কাজ"। dandvআমার GitHub ব্যবহারকারীর নাম।
ড্যান ড্যাসক্লেস্কু

12
আমি মনে করি এটি @ থমাস্টারের চেয়ে উত্তম উত্তর, যদি কেবল এটি হোস্টের এলিয়াস ব্যাখ্যা করে।
ডেভিড মোলস

2
আমি এই উত্তর পছন্দ। তবে, আমার জন্য এটি কেবল তখনই কাজ করে যদি আমি IdentitiesOnly yesআমার ssh কনফিগারেশন ফাইলটিতে যুক্ত করি।
winni2k

75

যেমনটি এখানে বলা হয়েছে: https://superuser.com/a/912281/607049

আপনি এটি প্রতি-রেপোটি কনফিগার করতে পারেন:

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

1
কি করে -F /dev/null? আমি যতদূর দেখতে পাচ্ছি এটি ~/.ssh/configডিফল্ট থেকে কনফিগার ফাইল পরিবর্তন করবে তবে কেন এটি পছন্দসই? একটি স্যান্ডবক্সযুক্ত কমান্ড নিশ্চিত করতে?
ডোমিনিক

3
linuxcommand.org/man_pages/ssh1.html , কোনও কনফিগার ফাইল নির্দিষ্ট করে না, সুতরাং যখন গিট এসএসএস চলবে , তখন কোনও কনফিগারেশন ফাইল পাস হবে না (আসলে এটি স্যান্ডবক্স মোডের একধরনের, কেবল ব্যবহারকারী কনফিগার ডিফল্ট বিকল্পগুলি উপেক্ষা করুন) সুপারসারিতে মূল থ্রেড রয়েছে
ডেভিড

1
আমি যার সন্ধান করছিলাম। ধন্যবাদ!
lostcitizen

কুবার পরিবেশে কাজ করার জন্য এএএএএ + সমাধান। ধন্যবাদ!
কোবরা বনাম নিনজা

1
হাই, আপনি কীভাবে এটি সাবমডিউলে প্রচার করতে জানেন?
আরকা প্রভা বসু

38

সমস্যাটি যখন আপনার একই হোস্টে বিভিন্ন রিমোট রিপোজিটারি থাকে (github.com বলুন) এবং আপনি তাদের সাথে বিভিন্ন এসএস কী (অর্থাত্ পৃথক গিটহাব অ্যাকাউন্ট) ব্যবহার করে যোগাযোগ করতে চান ।

সেটা করতে গেলে:

  1. প্রথমে আপনার নিজের আলাদা কীগুলি ~/.ssh/configফাইলটিতে ঘোষণা করা উচিত ।

    # Key for usual repositories on github.com
    Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
    
    # Key for a particular repository on github.com
    Host XXX
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_other_rsa

    এটি করে আপনি দ্বিতীয় কীটি গিথুব ডট কমের জন্য একটি নতুন বন্ধুত্বপূর্ণ নাম "XXX" এর সাথে যুক্ত করেন।

  2. তারপরে আপনাকে অবশ্যই আপনার নির্দিষ্ট সংগ্রহস্থলের দূরবর্তী উত্সটি পরিবর্তন করতে হবে, যাতে এটি আপনার সুনির্দিষ্টভাবে বন্ধুত্বপূর্ণ নামটি ব্যবহার করে।

    কমান্ড প্রম্পটের মধ্যে আপনার স্থানীয় সংগ্রহস্থল ফোল্ডারে যান এবং বর্তমান দূরবর্তী উত্সটি প্রদর্শন করুন:

    >git remote -v
    origin  git@github.com:myuser/myrepo.git (fetch)
    origin  git@github.com:myuser/myrepo.git (push)

    তারপরে এর সাথে উত্স পরিবর্তন করুন:

    >git remote set-url origin git@XXX:myuser/myrepo.git
    >git remote -v
    origin  git@XXX:myuser/myrepo.git (fetch)
    origin  git@XXX:myuser/myrepo.git (push)

    এখন আপনি স্বয়ংক্রিয়ভাবে ডান কীটি দিয়ে চাপ দিতে, আনতে পারেন।


1
এটি আমার মনে সর্বাধিক "সঠিক" উত্তর, যেখানে আপনি আপনার এসএসডি কনফিগারেশনের ফাইল এবং সংযোগগুলি কী পরিচালনা করেন যা সেরা অনুশীলন এবং সমর্থনযোগ্য দীর্ঘমেয়াদী।
জামেস্ক্যাম্পবেল

অন্যান্য সমাধানগুলি কাজের মতো মনে হচ্ছে, এটি দুর্দান্ত বৈশিষ্ট্যটি সরঞ্জামটি সমর্থন করে।
ক্রেগ.সি

দুর্দান্ত, আমি ঠিক যা খুঁজছিলাম, ধন্যবাদ !!
ম্যাজিকমেকার


36

হোস্ট বা আইপিকে এই জাতীয় .ssh/configফাইলে যুক্ত করার উপায় আরও ভাল :

Host (a space separated list of made up aliases you want to use for the host)
    User git
    Hostname (ip or hostname of git server)
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_(the key you want for this repo)

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

11
এটি অগত্যা সত্য নয়। আমি গিথুবের জন্য একাধিক কী ব্যবহার করি - একটি কাজের জন্য এবং একটি আমার ব্যক্তিগত অ্যাকাউন্টের জন্য। আপনাকে "হোস্ট" এর জন্য কোনও ডোমেন নাম রাখতে হবে না। আপনি যে কোনও ধরণের উপন্যাস রাখতে পারেন। উদাহরণস্বরূপ, আমি জিএইচ-হোম এবং জিএইচ-ওয়ার্কটিকে আমার হোস্ট-নেম হিসাবে ব্যবহার করি এবং যখন আমি ক্লোন করি তখন উদাহরণস্বরূপ, git clone git@gh-work:repo/project.git আমার ~ / .ssh / কনফিগারেশনে আমার দুটি বিভাগ থাকে যা উভয়ই হোস্টনামের জন্য github.com ব্যবহার করে। তাদের ঠিক আলাদা আলাদা আইডেন্টিটি
ফাইল

@ ব্রেটটোফ ৮86 এই কৌশলটি বেশিরভাগ অংশের জন্য কাজ করে তবে আপনি যখন কোনও সংগ্রহশালা যাচাই করছেন তা কি গিথুবে হোস্ট করা মণির উপর নির্ভর করে? গেমফিলের গিথুব রেপোতে রেফারেন্সটি আপনার "উরফ" ধারণ করে না, আপনি যদি প্রকল্পের অন্যান্য বিকাশকারীদের জন্য জিনিসগুলি ভাঙতে না চান তবে ভাল নয় ...
কেটেক

@ ব্রেটটোফ ৮ I আমার দুটি পৃথক গিথুব অ্যাকাউন্টও রয়েছে (কাজ, বাড়ি) তবে আমার পক্ষে কাজ করার উদাহরণ আমি পাই না। আপনি দুটি থাকার একটি নমুনা পোস্ট করতে পারেন?
চূড়ায়_লিকা_স্পিডার

আমার ক্লিপ_লিকা_স্পিডার এখানে আমার ~/.ssh/config পেস্টবিন.
com

32

আমি GIT_SSH এনভায়রনমেন্ট ভেরিয়েবলের সাথে গিয়েছিলাম। এখানে আমার মোড়কটি উপরে থেকে জো ব্লকের অনুরূপ, তবে কোনও পরিমাণ যুক্তি পরিচালনা করে।

ফাইল ~ / gitwrap.sh

#!/bin/bash
ssh -i ~/.ssh/gitkey_rsa "$@"

তারপরে, আমার .bashrc এ নিম্নলিখিতগুলি যুক্ত করুন:

export GIT_SSH=~/gitwrap.sh

আমি এটি .bashrc এ সেট করেছিলাম। তবে আমি যখন ওপেনশিফ্ট উদাহরণটিতে লগইন করি তখন মনে হয় না এটি কল করছে। আমি কিছু অনুপস্থিত করছি ?
জিগার শাহ

এটি আমার জন্য একটি ত্রুটির সাথে ব্যর্থ হয়েছে .. এটি স্ক্রিপ্ট ইভেন্টটি সেখানে উপস্থিত থাকা সত্ত্বেও এটি সক্ষম নয় .. কী হচ্ছে তা নিশ্চিত নয় ... ত্রুটি: /tmp/gitwrap.sh চলতে পারে না: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
ap1234

যদি আপনি "এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই" ত্রুটির মুখোমুখি হন gitwrap.sh, তবে পুরো পথ রাখুন , উদাহরণস্বরূপ/home/ubuntu/gitwrap.sh
তাহির আক্তার ২

আপনি -o StrictHostKeyChecking=nossh কমান্ডে যোগ করতে চাইতে পারেন
ড্যান-ম্যান

12

যদি এখানে অন্য কোনও সমাধান আপনার জন্য কাজ না করে এবং আপনি একাধিক এসএস-কী তৈরি করেছেন, তবে এখনও সাধারণ জিনিসগুলি করতে পারেন না

git pull

তারপরে ধরে নিবেন আপনার মতো দুটি এসএসএল কী ফাইল রয়েছে

id_rsa
id_rsa_other_key

তারপরে গিট রেপোর ভিতরে চেষ্টা করুন:

# Run these commands INSIDE your git directory
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_other_key

এবং আপনার গিথুব ডিফল্ট ব্যবহারকারীর নাম এবং ব্যবহারকারীর দ্বারা সঠিক কিনা তাও নিশ্চিত করুন:

# Run these commands INSIDE your git directory
git config user.name "Mona Lisa"
git config user.email "mona.lisa@email.com"

আরও তথ্যের জন্য https://gist.github.com/jexchan/2351996 দেখুন ।


যদি আপনি পান তবে Could not open a connection to your authentication agent.চেষ্টা করুন $ eval `ssh-agent -s`এবং আবার চেষ্টা করুন Note
cgnorthcutt

1
যারা হারিয়ে গেছে তাদের পক্ষে ssh-addকমান্ড ট্রিক আমার পক্ষে কাজ করেছিল। Ssh প্রমাণীকরণের পরে যাদের চেষ্টা করা হয় তাদের তালিকায় পরিচয় কী যুক্ত করুন। এটি আমার পক্ষে ভাল কাজ করেছে!
বেন কার্টরাইট

আপনি যে ডিরেক্টরিটি চালাচ্ছেন এটি কেন গুরুত্বপূর্ণ বলে আপনি মনে করেন ssh-add?
ট্রিপলি

@ বেনকার্টরাইট কারণ আপনি স্থানীয় সেটিংস পরিবর্তন করছেন, বৈশ্বিক সেটিংসটি নয়। এই পদ্ধতিটি .gitবিশ্বব্যাপী গিট প্রোগ্রাম নয়, রেপোর অভ্যন্তরে পরিবর্তিত হয়। আপনি --globalবিশ্বব্যাপী ব্যবহারকারীর নাম এবং ইমেল সেট করতে ব্যবহার করতে পারেন ।
Cgnorthcutt

11

আপনি যদি একটি স্বাভাবিক অনুরোধ (সঙ্গে GitHub সাথে সংযুক্ত হতে হবে যখন git pull origin master), হোস্ট সেটিং হিসেবে *~/.ssh/configআমার জন্য কাজ, অন্য কোন হোস্ট (বলুন, "GitHub" বা "গিগাবাইট") কাজ করছিল না।

Host *
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_xxx

পুরো "হোস্ট *" লাইনটি তখন বাইরে রেখে যেতে পারে।
লাইনিলো

1
এটি সম্ভবত কাজ করছে না কারণ এটি আপনার দূরবর্তী URL টির সাথে মেলে না। আপনি যদি ব্যবহার করতে চান তবে আপনাকে Host my-host-aliasসেট করতে হবে remote.origin.url=git@my-host-alias:[username]/[repo].git
ডেভিড মোলস

11

এই সমাধানগুলির অনেকগুলি প্রলুব্ধকর মনে হয়েছিল। তবে, আমি জেনেরিক গিট-মোড়ক-স্ক্রিপ্ট পদ্ধতির সর্বাধিক দরকারী হতে নিম্নলিখিত লিঙ্কে পেয়েছি:

gitকমান্ডটি দিয়ে কীভাবে একটি ssh কী ফাইল সুনির্দিষ্ট করা যায়

বিন্দুটি হ'ল gitনীচের মতো কোনও আদেশ নেই :

git -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

অ্যালভিনের সমাধানটি হ'ল এই শূন্যস্থান পূরণ করে এমন একটি ভাল-সংজ্ঞায়িত ব্যাশ-র‌্যাপার স্ক্রিপ্ট ব্যবহার করা:

git.sh -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

কোথায় git.sh:

#!/bin/bash

# The MIT License (MIT)
# Copyright (c) 2013 Alvin Abad
# https://alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command

if [ $# -eq 0 ]; then
    echo "Git wrapper script that can specify an ssh-key file
Usage:
    git.sh -i ssh-key-file git-command
    "
    exit 1
fi

# remove temporary file on exit
trap 'rm -f /tmp/.git_ssh.$$' 0

if [ "$1" = "-i" ]; then
    SSH_KEY=$2; shift; shift
    echo "ssh -i $SSH_KEY \$@" > /tmp/.git_ssh.$$
    chmod +x /tmp/.git_ssh.$$
    export GIT_SSH=/tmp/.git_ssh.$$
fi

# in case the git command is repeated
[ "$1" = "git" ] && shift

# Run the git command
git "$@"

আমি যাচাই করতে পারে এই একটা সমস্যা আমি একটি দূরবর্তী bitbucket রেপো জন্য ব্যবহারকারীকে / কী স্বীকৃতি সহ চাপ ছিল মীমাংসিত git remote update, git pullএবং git clone; এগুলির সবই এখন একটি cronকাজের স্ক্রিপ্টে কাজ করে যা অন্যথায় সীমাবদ্ধ শেল নেভিগেট করতে সমস্যা হচ্ছিল। আমি এই স্ক্রিপ্টটি আর এর মধ্যে থেকে কল করতে সক্ষম হয়েছি এবং এখনও একই একই cronএক্সিকিউট সমস্যাটি সমাধান করেছি (উদাঃ system("bash git.sh -i ~/.ssh/thatuserkey.pem pull"))।

আর রুবির মতো আর নয়, তবে আর যদি এটি করতে পারে ... O :-)


1
দেখতে দুর্দান্ত লাগছে! আমি এটি পরীক্ষা করে জবাব দেব।
ব্লুবার্ড

3
এছাড়াও সিনট্যাক্স থেকে, কিভাবে এই বেশী ভালো GIT_SSH_COMMAND="ssh -i ~/.ssh/thatuserkey.pem" git clone clone thatuser@myserver.com:/git/repo.gitঅনুযায়ী রবার্ট জ্যাক উইল এর উত্তর ?
ডেভিড মোলস

6

আপনার যদি সেই পথে আপনার ডিরেক্টরি রয়েছে যেখানে আপনি একটি প্রদত্ত সনাক্তকারী ফাইলের সাথে সাইন করতে চান তবে আপনি .ssh / কনফিগারেশন ফাইলের মাধ্যমে একটি নির্দিষ্ট সনাক্তকারী ফাইল ব্যবহার করে ControlPathউদাহরণস্বরূপ নির্দিষ্ট করতে পারেন :

host github.com
  ControlPath ~/Projects/work/**
  HostName github.com
  IdentityFile ~/.ssh/id_work
  User git

তারপরে sshপ্রদত্ত কাজের পথে গিট কমান্ড করার সময় নির্দিষ্ট পরিচয় ফাইলটি ব্যবহার করবে।


পরে জানতে পারলাম আপনার কাছে বিশিষ্টতাগুলি সেট করতে পারে ControlMaster autoএবং ControlPersist yesযাতে আপনি পাসওয়ার্ড প্রত্যেক সময় আবার টাইপ করতে হবে না। এই নিবন্ধটিতে
ক্রিস্টোবাল

3

আপনাকে নীচের মতো একটি। / .Ssh / কনফিগারেশন তৈরি করতে হবে

Host <Your bitbucket server>
User <userid>
Hostname <Your bitbucket server as above>
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa<file> This is your private key file

নীচে হিসাবে অনুমতি

-rw------- $HOME/.ssh/config

আপনার গিটটিতে আপনার সর্বজনীন কী যুক্ত করুন (বিড়াল ~ / .ssh / id_rsa_pub [বা সিমিলার নাম])

এবং তারপরে নীচের মত গিট ক্লোন করুন

git clone ssh://blahblah@blah.com/userid/test.git

3

অনেক ভাল উত্তর, কিন্তু তাদের মধ্যে কিছু প্রশাসনিক পূর্ববর্তী জ্ঞান ধরে নেয়।

আমার মনে হয় এটা গুরুত্বপূর্ণ স্পষ্টভাবে যে জোর যদি আপনি ওয়েব URL ক্লোন করে আপনার প্রকল্পের শুরু - https://github.com/<user-name>/<project-name>.git
তারপর আপনি প্রয়োজন নিশ্চিত যে url মান অধীনে [remote "origin"]মধ্যে .git/config , SSH URL- এ পরিবর্তন করা হয়েছে (নিচের কোড ব্লক দেখুন)।

এটির পাশাপাশি নিশ্চিত করুন যে আপনি sshCommmandনীচে উল্লিখিত হিসাবে যুক্ত করেছেন:

user@workstation:~/workspace/project-name/.git$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sshCommand = ssh -i ~/location-of/.ssh/private_key -F /dev/null <--Check that this command exist
[remote "origin"]
    url = git@github.com:<user-name>/<project-name>.git  <-- Make sure its the SSH URL and not the WEB URL
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

এটি সম্পর্কে এখানে আরও পড়ুন ।


1
আপনাকে অনেক ধন্যবাদ, গিটটি এসএস কী কীভাবে ব্যবহার করছে না তা বোঝার চেষ্টা করার জন্য অনেক সময় ব্যয় করেছে। গিথুব কেন ক্লোন বোতামে ডিফল্ট হিসাবে https url দেয় তা আমি বুঝতে পারি না।
চক্রদার রাজু

2

উইন্ডোজে গিট বাশ সহ আপনি কোনও সংগ্রহস্থল যুক্ত করতে নিম্নলিখিতটি ব্যবহার করতে পারেন ssh-agent bash -c 'ssh-add "key-address"; git remote add origin "rep-address"' উদাহরণস্বরূপ: ssh-agent bash -c 'ssh-add /d/test/PrivateKey.ppk; git remote add origin git@git.test.com:test/test.git'কম্পিউটারের ফোল্ডার টেস্টে কোন প্রাইভেট কী রয়েছে D এছাড়াও যদি আপনি কোনও সংগ্রহস্থল ক্লোন করতে চান তবে আপনি এটির git remote add originসাথে পরিবর্তন করতে পারেন git clone

এটি গিট বাশে প্রবেশের পরে, এটি আপনাকে পাসফ্রেজের জন্য জিজ্ঞাসা করবে!

সচেতন হন ওপেনশ প্রাইভেট কী এবং পুট্টি প্রাইভেট কী কী হস্তান্তরকারী!

যদি আপনি পুতটিজেন দ্বারা আপনার কীগুলি তৈরি করে থাকেন তবে আপনাকে অবশ্যই আপনার ব্যক্তিগত কী ওপেনশায় রূপান্তর করতে হবে!


1

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

গিট ম্যানুয়ালটি দেখুন: man gitআপনার কমান্ড শেলটিতে।


1

আমি ব্যবহার করি zshএবং বিভিন্ন কীগুলি ssh-agentআমার ল্যাপটপের অন্যান্য উদ্দেশ্যে (যেমন দূরবর্তী সার্ভারে অ্যাক্সেস) জন্য আমার জেডএস শেলের স্বয়ংক্রিয়ভাবে লোড হয় । আমি @ নিক এর উত্তরটি পরিবর্তন করেছি এবং আমি এটি আমার এমন এক প্রতিবেদনের জন্য ব্যবহার করছি যা প্রায়শই সতেজ হওয়া দরকার। (এই ক্ষেত্রে এটি আমার dotfilesযা আমি আমার সমস্ত মেশিনে যেখানেই যেখানে কাজ করছি না কেন একই এবং সর্বশেষতম সংস্করণ চাই))

bash -c 'eval `ssh-agent`; ssh-add /home/myname/.dotfiles/gitread; ssh-add -L; cd /home/myname/.dotfiles && git pull; kill $SSH_AGENT_PID'
  • একটি ssh- এজেন্ট স্প্যান
  • এজেন্টে কেবল পঠনযোগ্য কী যুক্ত করুন
  • ডিরেক্টরিটি আমার গিট রেপোতে পরিবর্তন করুন
  • তাহলে cdরেপো থেকে Dir সফল হয়, দূরবর্তী রেপো থেকে টান
  • মেরে এসএস-এজেন্ট প্রসারিত। (আমি আশেপাশে অনেকগুলি এজেন্ট চাই না)

1

জন্য gitlab RSAAuthentication yes

Host gitlab.com
  RSAAuthentication yes
  IdentityFile ~/.ssh/your_private_key_name
  IdentitiesOnly yes

ডক এখানে


আপনি আর সরবরাহ করা লিঙ্কটিতে উল্লেখ করা হবে না বলে মনে হচ্ছে
rbennell

1

এর পরিবর্তে উইন্ডোজ এর অধীনে GIT_SSH_COMMAND পরিবেশের পরিবর্তনশীল কাজ করতে:

set GIT_SSH_COMMAND="ssh -i private_key_file"

ব্যবহার করুন:

set "GIT_SSH_COMMAND=ssh -i private_key_file"

উক্তির মতো হতে হবে

set "variable=value" 

কিছু ব্যাকগ্রানড: https://stackoverflow.com/a/34402887/10671021


0

, SSH পোর্ট নম্বর 22 (ডিফল্ট) না হয়, যোগ Port xxমধ্যে~/.ssh/config

আমার ক্ষেত্রে (শব্দার্থবিজ্ঞান),

Host my_synology
    Hostname xxxx.synology.me
    IdentityFile ~/.ssh/id_rsa_xxxx
    User myname
    Port xx

তারপরে কনফিগে হোস্ট শিরোনাম ব্যবহার করে ক্লোন করুন। ("মাই_সাইনোলজি"। @ চপস্টিক্স এর "*" এড়াতে)

git clone my_synology:path/to/repo.git

0

আপনি যদি আমার মতো হন তবে আপনি:

  • আপনার ssh কীগুলি সংগঠিত রাখুন

  • আপনার গিট ক্লোন কমান্ডগুলি সহজ রাখুন

  • যে কোনও সংখ্যক সংগ্রহস্থলের জন্য কী সংখ্যার কী পরিচালনা করুন।

  • আপনার এসএস কী রক্ষণাবেক্ষণ হ্রাস করুন।

আমি আমার ~/.ssh/keysডিরেক্টরিতে আমার কী রাখি ।

আমি কনফিগারেশন চেয়ে কনভেনশন পছন্দ।

আমি মনে করি কোড আইন; এটি যত সহজ, তত ভাল।

পদক্ষেপ 1 - এলিয়াস তৈরি করুন

আপনার শেলটিতে এই উপনাম যুক্ত করুন: alias git-clone='GIT_SSH=ssh_wrapper git clone'

পদক্ষেপ 2 - স্ক্রিপ্ট তৈরি করুন

আপনার PATH এ এই ssh_wrapper স্ক্রিপ্ট যুক্ত করুন :

#!/bin/bash
# Filename: ssh_wrapper

if [ -z ${SSH_KEY} ]; then
    SSH_KEY='github.com/l3x'  # <= Default key
fi
SSH_KEY="~/.ssh/keys/${SSH_KEY}/id_rsa"
ssh -i "${SSH_KEY}" "$@"

উদাহরণ

Github.com/l3x কী ব্যবহার করুন:

KEY=github.com/l3x git-clone https://github.com/l3x/learn-fp-go

নিম্নলিখিত উদাহরণটিতে github.com/l3x কী (ডিফল্টরূপে) ব্যবহার করা হয়েছে:

git-clone https://github.com/l3x/learn-fp-go

বিটবকেট.আর.এলসিহান কী ব্যবহার করুন:

KEY=bitbucket.org/lsheehan git-clone git@bitbucket.org:dave_andersen/exchange.git

মন্তব্য

আপনি বেশিরভাগ সময় যা ব্যবহার করেন তার জন্য ssh_wrapper স্ক্রিপ্টে ডিফল্ট SSH_KEY পরিবর্তন করুন। এইভাবে, আপনাকে বেশিরভাগ সময় কেইওয়াই ভেরিয়েবল ব্যবহার করার দরকার নেই।

আপনি ভাবতে পারেন, "আরে! এটি একটি উপনাম, একটি স্ক্রিপ্ট এবং কীগুলির কিছু ডিরেক্টরি নিয়ে চলছে" তবে আমার কাছে এটি কনভেনশন। আমার প্রায় সমস্ত ওয়ার্কস্টেশন (এবং সেই বিষয়ে সার্ভারগুলি) একইভাবে কনফিগার করা হয়েছে।

এখানে আমার লক্ষ্য হ'ল আমি যে নিয়মগুলি নিয়মিত সম্পাদন করি সেগুলি সহজ করা।

আমার কনভেনশনগুলি, যেমন, ব্যাশ স্ক্রিপ্টস, এলিয়াসেস ইত্যাদি একটি সামঞ্জস্যপূর্ণ পরিবেশ তৈরি করে এবং আমাকে জিনিসগুলি সহজ রাখতে সহায়তা করে।

KISS এবং নামগুলির বিষয়টি গুরুত্বপূর্ণ।

আরও ডিজাইনের টিপসের জন্য আমার বই থেকে অধ্যায় 4 সলিউড ডিজাইনে যান : https://www.amazon.com/Learning-Functional-Programming-Lex-Shihan-ebook/dp/B0725B8MYW

আশা করি এইটি কাজ করবে. - লেক্স



0

এই পদ্ধতির সমস্যাটি হ'ল অন্তত উইন্ডোজে bash.exe দ্বারা চালিত হওয়ার পরে, এটি প্রতিবার একটি নতুন প্রক্রিয়া তৈরি করবে যা সুপ্ত থাকবে।

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

আপনি যদি সময়সূচীতে সিঙ্কিগ রেপোটির জন্য এটি ব্যবহার করতে চান তবে আপনার শেষে "&&shsh-এজেন্ট-কে" যুক্ত করতে হবে।

কিছুটা এইরকম:

ssh-agent bash -c 'ssh-add C:/Users/user/.ssh/your_key; git -C "C:\Path\to\your\repo" pull && ssh-agent -k' 

ssh-এজেন্ট-কে প্রক্রিয়াটি শেষ হয়ে গেলে শেষ করে দেবে।



-1

এই সমস্যার সমাধান খুঁজতে গিয়ে আমি খুঁজে পেয়েছি এসএস কী কী হ্যাক:

উদাহরণস্বরূপ আপনার কাছে কীগুলির 2 টি আলাদা সেট রয়েছে:

key1, key1.pub, key2, key2.pub

এই কীগুলি আপনার .sshডিরেক্টরিতে রাখুন

এখন আপনার .bashrcবা .bash_profileওরফে ফাইলে এই কমান্ডগুলি যুক্ত করুন

alias key1='cp ~/.ssh/key1 id_rsa && cp ~/.ssh/key1.pub id_rsa.pub'

alias key2='cp ~/.ssh/key2 id_rsa && cp ~/.ssh/key2.pub id_rsa.pub'

ভাল খবর! আপনি যখনই চাবিগুলি পরিবর্তন করতে একটি শর্টকাট রাখতে পারেন!

আশা করি এটি আপনার পক্ষে কাজ করে।

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