ฉันต้องการใช้การพุชและดึงโดยอัตโนมัติในGitExtensionโดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านในทุกครั้ง
ดังนั้นฉันจะบันทึกข้อมูลประจำตัวของฉันในคอมไพล์ได้อย่างไร
ฉันต้องการใช้การพุชและดึงโดยอัตโนมัติในGitExtensionโดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านในทุกครั้ง
ดังนั้นฉันจะบันทึกข้อมูลประจำตัวของฉันในคอมไพล์ได้อย่างไร
คำตอบ:
วิ่ง
git config --global credential.helper store
แล้วก็
git pull
ระบุชื่อผู้ใช้และรหัสผ่านจากนั้นรายละเอียดเหล่านั้นจะถูกจดจำในภายหลัง ข้อมูลประจำตัวจะถูกเก็บไว้ในไฟล์บนดิสก์ด้วยสิทธิ์ดิสก์ของ "ผู้ใช้เพียงแค่อ่าน / เขียนได้" แต่ยังคงอยู่ใน plaintext
หากคุณต้องการเปลี่ยนรหัสผ่านในภายหลัง
git pull
จะล้มเหลวเนื่องจากรหัสผ่านไม่ถูกต้องคอมไพล์จึงลบผู้ใช้ + รหัสผ่านที่ละเมิดออกจาก~/.git-credentials
ไฟล์ดังนั้นตอนนี้ให้เรียกใช้อีกครั้ง
git pull
เพื่อให้รหัสผ่านใหม่เพื่อให้ทำงานได้เร็วขึ้น
คุณสามารถใช้git config
เพื่อเปิดใช้งานการจัดเก็บข้อมูลรับรองในคอมไพล์
git config --global credential.helper store
เมื่อเรียกใช้คำสั่งนี้ครั้งแรกที่คุณดึงหรือดันจากที่เก็บระยะไกลคุณจะได้รับคำถามเกี่ยวกับชื่อผู้ใช้และรหัสผ่าน
หลังจากนั้นสำหรับการสื่อสารที่เกิดขึ้นกับที่เก็บระยะไกลคุณไม่จำเป็นต้องระบุชื่อผู้ใช้และรหัสผ่าน
รูปแบบการจัดเก็บเป็น.git-credentials
ไฟล์ที่เก็บในรูปแบบธรรมดา
นอกจากนี้คุณสามารถใช้ตัวช่วยอื่นสำหรับgit config credential.helper
แคชหน่วยความจำคือ:
git config credential.helper cache <timeout>
ซึ่งใช้ตัวเลือกtimeout parameter
กำหนดระยะเวลาที่จะเก็บข้อมูลรับรองในหน่วยความจำ การใช้ผู้ช่วยข้อมูลรับรองจะไม่แตะดิสก์และจะถูกลบหลังจากหมดเวลาที่ระบุ default
ค่า900 seconds (15 minutes).
คำเตือน : หากคุณใช้วิธีนี้รหัสผ่านบัญชี git ของคุณจะถูกบันทึกในplaintext
รูปแบบglobal .gitconfig file
เช่นใน linux มันจะเป็น/home/[username]/.gitconfig
หากคุณไม่พึงประสงค์ให้ใช้ssh key
บัญชีของคุณแทน
git config credential.helper cache
รหัสผ่านจะไม่ถูกบันทึกลงในไฟล์เก็บไว้ในหน่วยความจำเท่านั้น ดู: git-scm.com/docs/git-credential-cache
วิธีที่แนะนำและปลอดภัย: SSH
สร้างคีย์ ssh Github ไปที่github.com -> การตั้งค่า -> คีย์ SSH และ GPG -> คีย์ SSH ใหม่ ตอนนี้บันทึกรหัสส่วนตัวของคุณลงในคอมพิวเตอร์ของคุณ
จากนั้นหากบันทึกไพรเวตคีย์เป็นid_rsaในไดเรกทอรี~ / .ssh /เราจะเพิ่มรหัสนั้นเพื่อรับรองความถูกต้องเช่น:
ssh-add -K ~/.ssh/id_rsa
วิธีที่ปลอดภัยยิ่งขึ้น: การแคช
เราสามารถใช้ git-credential-store เพื่อแคชชื่อผู้ใช้และรหัสผ่านของเราเป็นระยะเวลาหนึ่ง เพียงป้อนข้อมูลต่อไปนี้ใน CLI ของคุณ (เทอร์มินัลหรือพร้อมรับคำสั่ง):
git config --global credential.helper cache
นอกจากนี้คุณยังสามารถกำหนดระยะเวลาการหมดเวลา (เป็นวินาที) เช่น:
git config --global credential.helper 'cache --timeout=3600'
วิธีการที่ปลอดภัยน้อยลง
อาจใช้ Git-credential-store แต่จะบันทึกรหัสผ่านในไฟล์ข้อความธรรมดาบนดิสก์ของคุณเช่น:
git config credential.helper store
คำตอบที่ล้าสมัย - รวดเร็วและไม่ปลอดภัย
นี่เป็นวิธีที่ไม่ปลอดภัยในการจัดเก็บรหัสผ่านของคุณเป็นข้อความธรรมดา หากมีคนควบคุมคอมพิวเตอร์ของคุณรหัสผ่านของคุณจะถูกเปิดเผย!
คุณสามารถตั้งชื่อผู้ใช้และรหัสผ่านดังนี้:
git config --global user.name "your username"
git config --global user.password "your password"
ใน Terminal ให้ป้อนข้อมูลต่อไปนี้:
# Set git to use the credential memory cache
git config --global credential.helper cache
โดยค่าเริ่มต้น Git จะแคชรหัสผ่านของคุณเป็นเวลา 15 นาที
หากต้องการเปลี่ยนการหมดเวลาแคชรหัสผ่านเริ่มต้นให้ป้อนข้อมูลต่อไปนี้:
# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'
cache
store
ดังนั้นคำสั่งทั้งหมดจะเป็น: git config --global credential.helper store
. โปรดทราบว่าสิ่งนี้จะเก็บรหัสผ่านของคุณไว้ในไฟล์ open-text (ไม่มีการเข้ารหัสใด ๆ )
--timeout
พารามิเตอร์คืออะไร
คุณสามารถแก้ไข~/.gitconfig
ไฟล์เพื่อเก็บข้อมูลรับรองของคุณ
sudo nano ~/.gitconfig
ซึ่งควรมีอยู่แล้ว
[user]
email = your@email.com
user = gitUSER
คุณควรเพิ่มที่ด้านล่างของไฟล์นี้
[credential]
helper = store
เหตุผลที่ฉันแนะนำตัวเลือกนี้เป็นสาเหตุที่เป็นสากลและหากคุณต้องการลบตัวเลือกที่คุณรู้ว่าจะไปที่ไหนและเปลี่ยนแปลง
ใช้ตัวเลือกนี้เฉพาะในคอมพิวเตอร์ส่วนบุคคลของคุณ
จากนั้นเมื่อคุณดึง | โคลน | ป้อนรหัสผ่าน git ของคุณโดยทั่วไปรหัสผ่านจะถูกบันทึกใน~/.git-credentials
รูปแบบ
https://GITUSER:GITPASSWORD@DOMAIN.XXX
WHERE DOMAIN.XXX สามารถเป็น GITHUB.COM | BITBUCKET.ORG | อื่น ๆ
ดูเอกสาร
เพียงใส่ข้อมูลประจำตัวของคุณใน Url เช่นนี้:
https://Username
:Password
@github.com/myRepoDir/myRepo.git
คุณสามารถจัดเก็บแบบนี้:
git remote add myrepo https://Userna...
ตัวอย่างที่จะใช้ :
git push myrepo master
ตอนนี้คือการแสดงรายชื่อแทน URL:
git remote -v
... และคำสั่งที่จะลบอย่างใดอย่างหนึ่ง:
git remote rm myrepo
git@github.com:Username/myRepo.git
https
ไม่ใช่ssh
วิธีแก้ปัญหาเช่นนี้จึงมีประโยชน์ โปรดทราบว่าคุณสามารถใช้ oauth-token ซึ่งมีความปลอดภัยมากกว่าเล็กน้อยที่รหัสผ่าน GitHub ของคุณ
สำหรับการตั้งค่าส่วนกลางเปิดเทอร์มินัล (จากที่ใดก็ได้) รันต่อไปนี้:
git config --global user.name "your username"
git config --global user.password "your password"
จากนั้น repo คอมไพล์ท้องถิ่นที่คุณมีในเครื่องของคุณจะใช้ข้อมูลนั้น
คุณสามารถกำหนดค่าแต่ละ repo ได้โดยทำดังนี้
เรียกใช้ต่อไปนี้:
git config user.name "your username"
git config user.password "your password"
มีผลกับโฟลเดอร์นั้นเท่านั้น (เนื่องจากการกำหนดค่าของคุณเป็นแบบโลคัล)
--local
แท็ก แต่ไม่มีอะไรเกิดขึ้นอีก
คุณสามารถใช้ git-credential-store เพื่อจัดเก็บรหัสผ่านของคุณที่ไม่ได้เข้ารหัสบนดิสก์ได้รับการป้องกันโดยสิทธิ์ของระบบไฟล์เท่านั้น
ตัวอย่าง
$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>
[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]
คุณสามารถตรวจสอบข้อมูลประจำตัวที่เก็บไว้ในไฟล์ ~/.git-credentials
สำหรับข้อมูลเพิ่มเติมเยี่ยมชม git-credential-store - ผู้ช่วยในการจัดเก็บข้อมูลประจำตัวบนดิสก์
คุณจะปลอดภัยมากขึ้นหากคุณใช้การตรวจสอบความถูกต้อง SSH มากกว่าการตรวจสอบชื่อผู้ใช้ / รหัสผ่าน
หากคุณใช้ Mac การตรวจสอบความถูกต้องไคลเอ็นต์ SSH จะรวมอยู่ในพวงกุญแจ MacOS เมื่อคุณสร้างคีย์ SSH แล้วให้พิมพ์เทอร์มินัลของคุณ:
ssh-add -K ~/.ssh/id_rsa
สิ่งนี้จะเพิ่มคีย์ส่วนตัว SSH ให้กับพวงกุญแจ MacOS ลูกค้า git จะใช้ ssh เมื่อมันเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล ตราบใดที่คุณได้ลงทะเบียนพับลิกคีย์ของคุณกับเซิร์ฟเวอร์คุณก็จะใช้ได้
SSH
เข้าถึง โดยใช้การตรวจสอบ HTTP GitHub/GitLab
คนที่ขโมยข้อมูลประจำตัวจะมีเพียงการเข้าถึง โทเค็นยังได้รับการออกแบบให้มีชีวิตที่ จำกัด
หลังจากไปโพสต์บล็อกและอื่น ๆอีกหลายสิบครั้งฉันก็ลองทุกวิธีและนี่คือสิ่งที่ฉันคิดขึ้นมา ครอบคลุมทุกอย่าง
เหล่านี้ล้วนเป็นวิธีการและเครื่องมือที่คุณสามารถรับรองความถูกต้องปลอดภัยคอมไพล์ที่จะโคลนพื้นที่เก็บข้อมูลได้โดยไม่ต้องใส่รหัสผ่านของการโต้ตอบพร้อมท์
ต้องการ Just Works ™หรือไม่ นี่คือกระสุนเงินวิเศษ
รับโทเค็นการเข้าถึงของคุณ (ดูหัวข้อใน cheatsheet หากคุณต้องการคำแนะนำ Github หรือ Gitea สำหรับสิ่งนั้น) และตั้งค่าในตัวแปรสภาพแวดล้อม (ทั้งสำหรับ dev ท้องถิ่นและการปรับใช้)
MY_GIT_TOKEN=xxxxxxxxxxxxxxxx
สำหรับ Github ให้คัดลอกและเรียกใช้คำต่อบรรทัดเหล่านี้:
git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"
ขอแสดงความยินดีขณะนี้เครื่องมืออัตโนมัติใด ๆ ที่โคลน git ที่เก็บข้อมูลจะไม่ถูกขัดขวางโดยการแจ้งรหัสผ่านไม่ว่าจะใช้ https หรือรูปแบบของ ssh url
ไม่ได้ใช้ Github ใช่ไหม
สำหรับแพลตฟอร์มอื่น ๆ (Gitea, Github, Bitbucket) เพียงแค่เปลี่ยน URL อย่าเปลี่ยนชื่อผู้ใช้ (โดยพลการพวกเขาจำเป็นสำหรับรายการกำหนดค่าที่แตกต่างกัน)
ความเข้ากันได้
สามารถใช้งานได้ใน MacOS, Linux, Windows (ใน Bash), Docker, CircleCI, Heroku, Akkeris เป็นต้น
ข้อมูลเพิ่มเติม
ดูส่วน ".gitconfig แทนที่จะเป็น" ของ cheatsheet
ความปลอดภัย
ดูหัวข้อ "ความปลอดภัย" ของแผ่นงาน
git config --global credential."https://somegithost.com".username MyUserName
ซึ่งอยู่ใน cheatsheet ของคุณ แต่ไม่ใช่ที่อื่นในชุดคำตอบนี้ ทางออกเฉพาะนั้นไม่ได้ตอบคำถามของ OP แต่มันก็ตอบฉันแล้วขอบคุณ!
ในกรณีนี้คุณต้องมีผู้ช่วยหนังสือรับรอง git เพื่อบอก git ให้จดจำรหัสผ่านและชื่อผู้ใช้ GitHub ของคุณโดยใช้บรรทัดคำสั่งต่อไปนี้:
git config --global credential.helper wincred
และหากคุณใช้ repo โดยใช้คีย์ SSH คุณต้องใช้คีย์ SSH เพื่อตรวจสอบสิทธิ์
ไม่มีคำตอบข้างต้นสำหรับฉัน ฉันได้รับสิ่งต่อไปนี้ทุกครั้งที่ฉันต้องการfetch
หรือpull
:
Enter passphrase for key '/Users/myusername/.ssh/id_rsa':
สำหรับ Macs
ฉันสามารถหยุดมันได้โดยขอข้อความรหัสผ่านของฉันโดย:
vi ~/.ssh/config
UseKeychain yes
:wq!
สำหรับ Windows
ฉันสามารถทำให้มันทำงานโดยใช้ข้อมูลใน stackexchange นี้: https://unix.stackexchange.com/a/12201/348665
นอกเหนือจากการแก้ไข~/.gitconfig
ไฟล์แล้วคุณสามารถทำได้ถ้าถามว่า:
git config --local --edit
หรือ
git config --global --edit
git config --local user.name 'your username'
git config --local user.password 'your password'
หรือ
git config --global user.name 'your username'
git config --global user.password 'your password'
ชื่อผู้ใช้และรหัสผ่านของคุณอาจใช้อักขระบางตัวที่จะทำลายรหัสผ่านของคุณหากคุณใช้เครื่องหมายคำพูดคู่
--local
หรือ--global
หมายถึงการกำหนดค่าพารามิเตอร์จะถูกบันทึกไว้สำหรับโครงการหรือสำหรับผู้ใช้ระบบปฏิบัติการ
เพียงแค่ใช้
git config --global credential.helper store
และทำการดึง gitมันจะถามชื่อผู้ใช้และรหัสผ่านจากนี้มันจะไม่ให้พรอมต์ชื่อผู้ใช้และรหัสผ่านใด ๆ มันจะเก็บรายละเอียด
.git-credentials
คือที่เก็บชื่อผู้ใช้และรหัสผ่านของคุณ (โทเค็นการเข้าถึง) เมื่อคุณเรียกใช้git config --global credential.helper store
ซึ่งเป็นคำตอบอื่น ๆ ที่แนะนำแล้วพิมพ์ชื่อผู้ใช้และรหัสผ่านหรือโทเค็นการเข้าถึงของคุณ:
https://${username_or_access_token}:${password_or_access_token}@github.com
ดังนั้นเพื่อบันทึกชื่อผู้ใช้และรหัสผ่าน (เข้าถึงโทเค็น):
git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials
สิ่งนี้มีประโยชน์มากสำหรับหุ่นยนต์ gitHub เช่นการแก้ปัญหาการสร้างอัตโนมัติของเชนในที่เก็บนักเทียบท่าเดียวกันโดยมีกฎสำหรับสาขาที่แตกต่างกันและจากนั้นเรียกมันโดยการผลักดันมันในpost_push
เชื่องช้าในศูนย์กลางนักเทียบท่า
ตัวอย่างของสิ่งนี้สามารถเห็นได้ที่นี่ใน stackoverflow
วิธีที่รวดเร็วในการแคชหนังสือรับรอง git:
git config credential.helper 'cache' --timeout=10800
ดีและปลอดภัย
การหมดเวลาเป็นวินาที
หลังจากอ่านกระทู้เต็มและทดสอบคำตอบส่วนใหญ่กับคำถามนี้ในที่สุดฉันก็พบว่าขั้นตอนที่เหมาะกับฉัน ฉันต้องการแบ่งปันในกรณีที่มีคนจัดการกับกรณีการใช้งานที่ซับซ้อน แต่ก็ยังไม่ต้องการผ่านเธรดแบบเต็มและgitcredentials , gitcredentials-storeฯลฯ หน้าคนอย่างที่ฉันทำ
ค้นหาขั้นตอนด้านล่างที่ฉันแนะนำถ้าคุณ (เช่นฉัน) ต้องจัดการกับที่เก็บหลายแห่งจากผู้ให้บริการหลายราย (GitLab, GitHub, Bitbucket ฯลฯ ) โดยใช้ชื่อผู้ใช้ / รหัสผ่านที่แตกต่างกันหลายชุด หากคุณมีบัญชีเดียวที่จะทำงานแทนคุณอาจจะดีกว่าที่จะใช้โซลูชันgit config --global credential.helper store
หรือgit config --global user.name "your username"
อื่น ๆ ที่ได้รับการอธิบายอย่างดีในคำตอบก่อนหน้า
ทางออกของฉัน:
> git config --global --unset credentials.helper
> cd /path/to/my/repo
> git config --unset credential.helper
> git config credential.helper 'store --file ~/.git_repo_credentials'
หมายเหตุ : คำสั่งนี้จะสร้างไฟล์ใหม่ชื่อ ".git_repo_credentials" ในไดเรกทอรีหลักของคุณซึ่ง Git เก็บข้อมูลรับรองของคุณไว้ หากคุณไม่ระบุชื่อไฟล์ Git จะใช้ ".git_credentials" เริ่มต้น ในกรณีนี้เพียงแค่ออกคำสั่งต่อไปนี้จะทำ:
> git config credential.helper store
git config credential.*.username my_user_name
หมายเหตุ : การใช้ "*" โดยปกติจะเป็นไรถ้าที่เก็บของคุณมาจากผู้ให้บริการรายเดียวกัน (เช่น GitLab) หากที่เก็บของคุณโฮสต์โดยผู้ให้บริการที่แตกต่างกันดังนั้นฉันขอแนะนำให้ตั้งลิงก์ไปยังผู้ให้บริการสำหรับทุก ๆ ที่เก็บข้อมูลอย่างชัดเจนเช่นในตัวอย่างต่อไปนี้ (สำหรับ GitLab):
git config credential.https://gitlab.com.username my_user_name
ณ จุดนี้หากคุณออกคำสั่งที่ต้องการข้อมูลประจำตัวของคุณ (เช่นgit pull
) คุณจะถูกถามรหัสผ่านที่สอดคล้องกับ "my_user_name" จำเป็นต้องดำเนินการนี้เพียงครั้งเดียวเนื่องจาก git เก็บข้อมูลรับรองไว้ที่ ".git_repo_credentials" และจะใช้ข้อมูลเดียวกันโดยอัตโนมัติในการเข้าถึงครั้งต่อไป
จากความคิดเห็นโดย rifrol, บน Linux Ubuntu, จากคำตอบนี้, นี่เป็นวิธีใน Ubuntu:
sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
ดิสทรือื่น ๆ ให้ไบนารีดังนั้นคุณไม่ต้องสร้างมัน
โดยปกติแล้วใน OS X จะมี "built" พร้อมกับโมดูลเริ่มต้นของ "osxkeychain" ดังนั้นคุณจะได้รับฟรี
ตรวจสอบเอกสารทางคอมไพล์อย่างเป็นทางการ:
หากคุณใช้การขนส่ง SSH สำหรับเชื่อมต่อกับรีโมทคุณอาจมีรหัสที่ไม่มีข้อความรหัสผ่านซึ่งช่วยให้คุณถ่ายโอนข้อมูลได้อย่างปลอดภัยโดยไม่ต้องพิมพ์ชื่อผู้ใช้และรหัสผ่านของคุณ อย่างไรก็ตามมันเป็นไปไม่ได้กับโปรโตคอล HTTP - ทุกการเชื่อมต่อต้องการชื่อผู้ใช้และรหัสผ่าน สิ่งนี้จะยิ่งยากขึ้นสำหรับระบบที่มีการตรวจสอบความถูกต้องด้วยสองปัจจัยซึ่งโทเค็นที่คุณใช้สำหรับรหัสผ่านจะถูกสร้างแบบสุ่มและไม่สามารถออกเสียงได้
โชคดีที่ Git มีระบบข้อมูลรับรองที่สามารถช่วยเหลือคุณได้ Git มีตัวเลือกให้ในกล่อง:
ค่าเริ่มต้นคือไม่แคชเลย ทุกการเชื่อมต่อจะแจ้งให้คุณใส่ชื่อผู้ใช้และรหัสผ่าน
โหมด“ แคช” เก็บข้อมูลประจำตัวในหน่วยความจำในช่วงระยะเวลาหนึ่ง ไม่มีรหัสผ่านใด ๆ ที่เก็บไว้ในดิสก์และจะถูกลบออกจากแคชหลังจาก 15 นาที
โหมด“ store” จะบันทึกข้อมูลรับรองลงในไฟล์ข้อความธรรมดาบนดิสก์และจะไม่มีวันหมดอายุ ซึ่งหมายความว่าจนกว่าคุณจะเปลี่ยนรหัสผ่านสำหรับโฮสต์ Git คุณจะไม่ต้องพิมพ์ข้อมูลประจำตัวของคุณอีกเลย ข้อเสียของวิธีการนี้คือรหัสผ่านของคุณจะถูกเก็บไว้ในข้อความธรรมดาในไฟล์ธรรมดาในไดเรกทอรีบ้านของคุณ
หากคุณใช้ Mac Git จะมาพร้อมกับโหมด“ osxkeychain” ซึ่งจะเก็บข้อมูลรับรองไว้ในพวงกุญแจที่ปลอดภัยซึ่งเชื่อมต่อกับบัญชีระบบของคุณ วิธีการนี้จัดเก็บข้อมูลรับรองไว้ในดิสก์และไม่หมดอายุ แต่จะถูกเข้ารหัสด้วยระบบเดียวกับที่จัดเก็บใบรับรอง HTTPS และเติมอัตโนมัติ Safari
หากคุณใช้ Windows คุณสามารถติดตั้งผู้ช่วยที่เรียกว่า "Git Credential Manager สำหรับ Windows" สิ่งนี้คล้ายกับตัวช่วย“ osxkeychain” ที่อธิบายไว้ข้างต้น แต่ใช้ Windows Credential Store เพื่อควบคุมข้อมูลที่ละเอียดอ่อน มันสามารถพบได้ที่ https://github.com/Microsoft/Git-Credential-Manager-for-Windows
คุณสามารถเลือกหนึ่งในวิธีเหล่านี้โดยการตั้งค่าการกำหนดค่า Git:
$ git config --global credential.helper cache
$ git config --global credential.helper store