ฉันgit push
ทำงานกับที่เก็บ Git ระยะไกล
ทุกคนpush
จะแจ้งให้ผมที่จะป้อนข้อมูลและusername
password
ฉันต้องการหลีกเลี่ยงทุกครั้งที่กด แต่จะกำหนดค่าให้หลีกเลี่ยงได้อย่างไร
ฉันgit push
ทำงานกับที่เก็บ Git ระยะไกล
ทุกคนpush
จะแจ้งให้ผมที่จะป้อนข้อมูลและusername
password
ฉันต้องการหลีกเลี่ยงทุกครั้งที่กด แต่จะกำหนดค่าให้หลีกเลี่ยงได้อย่างไร
คำตอบ:
เปิด terminal เพื่อสร้างคีย์ ssh:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(ใช้งานได้เฉพาะในกรณีที่โปรแกรมส่งมอบมีความสามารถในการใช้ใบรับรอง / คีย์ส่วนตัว & สาธารณะ ssh)
นี่คือคำแนะนำสำหรับ putty gen สำหรับขั้นตอนข้างต้น
ขั้นตอนนี้จะแตกต่างกันไปขึ้นอยู่กับการตั้งค่ารีโมตของคุณ
หากเป็นที่เก็บ GitHub และคุณมีสิทธิ์ระดับผู้ดูแลระบบให้ไปที่การตั้งค่าและคลิก 'เพิ่มคีย์ SSH' คัดลอกเนื้อหาของคุณ~/.ssh/id_rsa.pub
ลงในช่องที่มีข้อความ 'คีย์'
id_rsa.pub
หากพื้นที่เก็บข้อมูลของคุณจะบริหารงานโดยคนอื่นให้ผู้ดูแลระบบของคุณ
หากที่เก็บข้อมูลระยะไกลของคุณดูแลโดยคุณคุณสามารถใช้คำสั่งนี้ได้เช่น:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
หากคุณทำตามขั้นตอนด้านบนแล้วและยังคงได้รับพรอมต์รหัสผ่านตรวจสอบให้แน่ใจว่า URL repo ของคุณอยู่ในแบบฟอร์ม
git+ssh://git@github.com/username/reponame.git
ตรงข้ามกับ
https://github.com/username/reponame.git
หากต้องการดู repo URL ของคุณให้เรียกใช้:
git remote show origin
คุณสามารถเปลี่ยน URL ได้ด้วย:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1] ส่วนนี้ประกอบด้วยคำตอบจากEric P
git remote set-url origin git@github.com:/username/projectname.git
รันคำสั่งต่อไปนี้เพื่อเปิดใช้งานการแคชหนังสือรับรอง
$ git config credential.helper store
$ git push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
การใช้งานก็ควรระบุแคชหมดอายุ ,
git config --global credential.helper 'cache --timeout 7200'
หลังจากเปิดใช้งานการแคชข้อมูลประจำตัวก็จะถูกเก็บไว้สำหรับ7200 วินาที (2 ชั่วโมง)
หมายเหตุ:ผู้ช่วยข้อมูลรับรองจัดเก็บรหัสผ่านที่ไม่ได้เข้ารหัสบนดิสก์ภายในเครื่อง
git
manpage: "การใช้ตัวช่วยนี้จะจัดเก็บรหัสผ่านของคุณไม่เข้ารหัสบนดิสก์ได้รับการป้องกันโดยสิทธิ์ระบบไฟล์เท่านั้น"
store
ตัวช่วยข้อมูลรับรองที่จัดเก็บรหัสผ่านไว้ในดิสก์ที่ไม่ได้เข้ารหัส
git config --unset credential.helper
หากคุณตั้งค่าคีย์ SSH แล้วและยังได้รับพรอมต์รหัสผ่านตรวจสอบให้แน่ใจว่า URL repo ของคุณอยู่ในแบบฟอร์ม
git+ssh://git@github.com/username/reponame.git
ตรงข้ามกับ
https://github.com/username/reponame.git
หากต้องการดู repo URL ของคุณให้เรียกใช้:
git remote show origin
คุณสามารถเปลี่ยน URL ได้git remote set-url
เช่น:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
ในพื้นที่แล้วพยายามผลักดันหลังจากเพิ่มรีโมตจาก repo ใหม่บนเว็บไซต์ GitHub
git@github.com/username/reponame.git
เพียงใช้--repo
ตัวเลือกสำหรับคำสั่ง git push แบบนี้:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
งานเช่นกันหากคุณไม่รังเกียจที่จะถูกใช้เป็นรหัสผ่านในแต่ละครั้ง
git push --repo https://github.com/Username/repo
มันจะทำงานได้โดยไม่ต้องมีการ.git
ขยาย
คุณสามารถใช้git-credential-storeผ่าน
git config credential.helper store
ซึ่งเก็บรหัสผ่านของคุณที่ไม่ได้เข้ารหัสในระบบไฟล์ :
การใช้ตัวช่วยนี้จะจัดเก็บรหัสผ่านของคุณที่ไม่ได้เข้ารหัสบนดิสก์ได้รับการป้องกันโดยสิทธิ์ระบบไฟล์เท่านั้น หากนี่ไม่ใช่การแลกเปลี่ยนความปลอดภัยที่ยอมรับได้ให้ลอง git-credential-cache หรือค้นหาผู้ช่วยเหลือที่รวมเข้ากับที่เก็บข้อมูลที่ปลอดภัยซึ่งระบบปฏิบัติการของคุณจัดทำ
ใช้git-credential-cacheซึ่งโดยปกติแล้วจะเก็บรหัสผ่านไว้เป็นเวลา 15 นาที
git config credential.helper cache
เพื่อตั้งค่าการหมดเวลาที่แตกต่างกันใช้--timeout
(ที่นี่ 5 นาที)
git config credential.helper 'cache --timeout=300'
- หากคุณใช้ Mac Git จะมาพร้อมกับโหมด "osxkeychain"ซึ่งจะเก็บข้อมูลรับรองไว้ในพวงกุญแจที่ปลอดภัยซึ่งเชื่อมต่อกับบัญชีระบบของคุณ วิธีนี้เก็บข้อมูลประจำตัวไว้ในดิสก์และจะไม่มีวันหมดอายุ แต่จะเข้ารหัสด้วยระบบเดียวกับที่จัดเก็บใบรับรอง HTTPS และเติมอัตโนมัติ Safari
git config --global credential.helper osxkeychain
เล่นต่อไปในบรรทัดคำสั่งจะเปิดใช้งานคุณลักษณะนี้: คุณจะต้องจัดเก็บข้อมูลรับรองไว้ใน Keychain โดยใช้แอป Keychain เช่นกัน- หากคุณใช้ Windows คุณสามารถติดตั้งผู้ช่วยที่เรียกว่า "Git Credential Manager สำหรับ Windows" สิ่งนี้คล้ายกับตัวช่วย“ osxkeychain” ที่อธิบายไว้ข้างต้น แต่ใช้ Windows Credential Store เพื่อควบคุมข้อมูลที่ละเอียดอ่อน มันสามารถพบได้ที่https://github.com/Microsoft/Git-Credential-Manager-for-Windows [เน้นเหมือง]
credential.helper cache
ไม่ทำงาน git config --global credential.helper wincred
มันควรจะเป็น
ฉันใช้ลิงค์ https ( https://github.com/org/repo.git
) แทนลิงค์ ssh;
git@github.com:org/repo.git
การสลับแก้ปัญหาสำหรับฉัน!
ขั้นตอนที่ 1 -
สร้างคีย์ SSH บนระบบ linux ของคุณโดยใช้คำสั่งด้านล่าง
ssh-keygen -t rsa -b 4096 -C "your_email"
มันจะถามรหัสผ่านและชื่อไฟล์ (ค่าเริ่มต้นจะเป็น ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)
ขั้นตอนที่ 2 -
เมื่อไฟล์ถูกสร้างให้เพิ่มพับลิกคีย์สาธารณะ id_rsa.pub ไปยังส่วน github account ssh
ขั้นตอนที่ 3 -
ในเครื่องของคุณให้เพิ่ม private key id_rsa ไปยัง ssh-agent โดยใช้คำสั่งด้านล่าง
ssh-add ~/.ssh/id_rsa
ขั้นตอนที่ 4 -
ตอนนี้เพิ่ม url ระยะไกล git@github.com: user_name / repo_name.git ไปยัง repo git ในพื้นที่โดยใช้คำสั่งด้านล่าง
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
แค่นั้นแหละ.
โยงไคลเอนต์ git ของคุณไปยังที่เก็บข้อมูลรับรอง OS ของคุณ ตัวอย่างเช่นใน Windows คุณผูกตัวช่วยข้อมูลประจำตัวเพื่อทำสิ่งต่อไปนี้:
git config --global credential.helper wincred
มีวิธีข้ามการพิมพ์รหัสผ่านเมื่อใช้ https: // บน GitHub หรือไม่
บนระบบปฏิบัติการ Windows ให้ใช้สิ่งนี้แทนสิ่งนี้ใช้ได้กับฉัน:
https://{Username}:{Password}@github.com/{Username}/{repo}.git
เช่น
git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git
git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git
git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git
git push origin master
แค่ต้องการชี้ให้เห็นบางสิ่งบางอย่างเกี่ยวกับการแก้ปัญหาดังกล่าวข้างต้นหลายครั้ง
git config credential.helper store
คุณสามารถใช้คำสั่งใด ๆ ที่ต้องใช้รหัสผ่านหลังจากนี้ คุณไม่จำเป็นต้องผลักดัน (ตัวอย่างเช่นคุณสามารถดึง) หลังจากนั้นคุณไม่จำเป็นต้องพิมพ์ชื่อผู้ใช้ / รหัสผ่านอีกครั้ง
ฉันใช้คำตอบที่พาเวลแนะนำและใช้ได้กับฉัน ความแตกต่างของฉันคือการทำในขณะที่ฉันเพิ่มระยะไกลเช่น:git remote add (alias) https://(name:password)@github.com/(the remote address).git
การรันคำสั่งด้านล่างแก้ปัญหาให้ฉัน
git config --global credential.helper wincred
โปรดอ้างอิงเอกสาร GitHub ด้านล่าง:
https://help.github.com/articles/caching-your-github-password-in-git/
เท่าที่ผมรู้ว่ามีเพียงสองปลอดภัยวิธี: SSHหรือpasswd เข้ารหัสโดยใช้คีย์สโตร์
cat ~/.ssh/id_rsa.pub
วางมันมีชื่อและบันทึกไว้ (ถ้าคุณไม่มีไฟล์ดังกล่าวสร้างหนึ่งสำหรับตัวเองโดยssh-keygen -t rsa
- เพียงแค่ใส่สำหรับพรอมต์ทั้งหมด);git remote set-url origin git+ssh://git@github.com/username/reponame.git
- คุณสามารถตรวจสอบได้ก่อนgit remote -v
);touch t; git add t; git commit -m "test"; git push
และยืนยันว่าใช่แล้วเพลิดเพลินไปกับโลกที่ไม่มีรหัสผ่านหากคุณเพียงแค่ใช้git config --global credential.helper store
ตามที่คนอื่น ๆ กล่าวถึงรหัสผ่านที่ไม่ได้เข้ารหัสของคุณจะถูกเก็บไว้ในรูปแบบข้อความธรรมดา~/.git-credentials
ซึ่งไม่ปลอดภัยเท่าที่ควร
ลองเข้ารหัสมัน
sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
git config --global credential.helper store
https://git@github.com/username/reponame.git
ในกรณีนี้คุณกำลังใช้
โซลูชันของฉันบน Windows:
ssh-keygen -t rsa
(กด Enter สำหรับค่าทั้งหมด)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
หากพีซีของคุณปลอดภัยหรือคุณไม่สนใจเกี่ยวกับความปลอดภัยของรหัสผ่านสิ่งนี้สามารถทำได้โดยง่าย สมมติว่าที่เก็บรีโมตอยู่บน GitHub และorigin
เป็นชื่อโลคัลของคุณสำหรับที่เก็บรีโมตให้ใช้คำสั่งนี้
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
--push
ธงเพื่อให้แน่ใจว่าการเปลี่ยนแปลงนี้ URL ของพื้นที่เก็บข้อมูลสำหรับgit push
คำสั่งเท่านั้น (คำถามที่ถามในโพสต์ต้นฉบับนั้นเกี่ยวกับgit push
คำสั่งเท่านั้นการขอชื่อผู้ใช้ + รหัสผ่านเท่านั้นสำหรับการดำเนินการพุชเป็นการตั้งค่าปกติสำหรับที่เก็บสาธารณะบน GitHub โปรดทราบว่าที่เก็บส่วนตัวบน GitHub จะต้องใช้ชื่อผู้ใช้ + รหัสผ่าน ดังนั้นสำหรับที่เก็บข้อมูลส่วนตัวคุณไม่ต้องการใช้--push flag
... )
คำเตือน:สิ่งนี้ไม่ปลอดภัยอย่างแน่นอนเนื่องจาก:
ISP ของคุณหรือใครก็ตามที่บันทึกการเข้าถึงเครือข่ายของคุณสามารถดูรหัสผ่านเป็นข้อความธรรมดาใน URL ได้อย่างง่ายดาย
git remote show origin
ทุกคนที่ได้รับการเข้าถึงเครื่องคอมพิวเตอร์ของคุณสามารถดูรหัสผ่านของคุณโดยใช้
นั่นเป็นสาเหตุที่การใช้คีย์ SSH เป็นคำตอบที่ยอมรับได้
แม้คีย์ SSH จะไม่ปลอดภัยโดยสิ้นเชิง ทุกคนที่สามารถเข้าถึงพีซีของคุณยังคงสามารถทำการพุชที่ที่เก็บข้อมูลของคุณหรือที่แย่กว่านั้นคือดันส่งการเปลี่ยนแปลงโค้ดของคุณ (การคอมมิชต์แบบพุชทั้งหมดจะเห็นได้ชัดเจนใน GitHub แต่ถ้ามีคนต้องการเปลี่ยนรหัสของคุณอย่างลับๆพวกเขาสามารถคอมมิชชัน--amend
ก่อนหน้าโดยไม่เปลี่ยนข้อความการคอมมิทและจากนั้นบังคับมัน )
แต่การเปิดเผยรหัสผ่านของคุณแย่ลง หากผู้โจมตีได้รับความรู้เกี่ยวกับชื่อผู้ใช้ + รหัสผ่านพวกเขาสามารถทำสิ่งต่าง ๆ เช่นล็อคคุณออกจากบัญชีของคุณลบบัญชีของคุณลบที่เก็บถาวร ฯลฯ
หรือเพื่อความง่ายและปลอดภัยคุณสามารถระบุชื่อผู้ใช้ของคุณใน URL เท่านั้นดังนั้นคุณจะต้องพิมพ์รหัสผ่านทุกครั้งที่คุณgit push
แต่คุณจะไม่ต้องให้ชื่อผู้ใช้ของคุณทุกครั้ง (ฉันค่อนข้างชอบวิธีนี้การพิมพ์รหัสผ่านให้ฉันหยุดคิดทุกครั้งที่ฉันgit push
ดังนั้นฉันจึงไม่ได้git push
ตั้งใจ)
git remote set-url --push origin https://<username>@github.com/<repo>
@
กำลังคิดคำสั่งหลังจาก @ เป็นส่วนหนึ่งของเซิร์ฟเวอร์ git?
ทั้งหมดนี้เกิดขึ้นเพราะคอมไพล์ไม่ได้ให้ตัวเลือกในคำสั่ง clone / pull / push / fetch เพื่อส่งหนังสือรับรองผ่านไพพ์ แม้ว่าจะให้ credential.helper แต่จะเก็บไว้ในระบบไฟล์หรือสร้าง daemon เป็นต้นบ่อยครั้งที่หนังสือรับรองของ GIT นั้นเป็นระดับระบบและ onus เพื่อให้ปลอดภัยอยู่ในแอปพลิเคชันที่เรียกใช้คำสั่ง git ไม่ปลอดภัยอย่างแน่นอน
นี่คือสิ่งที่ฉันต้องแก้ไข 1. เวอร์ชัน Git (git --version) ควรมากกว่าหรือเท่ากับ 1.8.3
โคลน GIT
สำหรับการโคลนให้ใช้ "git clone URL" หลังจากเปลี่ยน URL จากรูปแบบ http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} เป็น http: // {myuser}: {myprep} /{myrepo_name.git}
จากนั้นล้างที่เก็บรหัสผ่านดังที่แสดงไว้ในหัวข้อถัดไป
การกวาดล้าง
ตอนนี้มันจะหายไปแล้ว
หากแอปพลิเคชันของคุณใช้ Java เพื่อออกคำสั่งเหล่านี้ให้ใช้ ProcessBuilder แทน Runtime หากคุณต้องใช้ Runtime ให้ใช้ getRunTime (). exec ซึ่งรับสตริง String เป็นอาร์กิวเมนต์ด้วย / bin / bash และ -c เป็นอาร์กิวเมนต์แทนที่จะเป็นสตริงที่ใช้ String เดี่ยวเป็นอาร์กิวเมนต์
GET FETCH / PULL / PUSH
คุณจะต้องติดตั้งคีย์ส่วนตัว SSH คุณสามารถตรวจสอบนี้หน้าวิธีการทำติดตั้งบน Mac ถ้าคุณอยู่ในลินุกซ์ควรจะเกือบจะเหมือนกันใน Windows คุณจะต้องเครื่องมือเช่นMSYS
ปรากฏว่าอย่างน้อยเมื่อใช้ TortoiseGIT บน Windows เป็นไปได้ที่จะสร้างคีย์ SSH และโอนไปยังเซิร์ฟเวอร์ GIT โดยใช้เพียง:
> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]