ฉันมีบริการสร้างอัตโนมัติซึ่งดาวน์โหลดจาก git private repository ปัญหาคือเมื่อพยายามโคลนที่เก็บจำเป็นต้องระบุรหัสผ่านเนื่องจากจำไม่ได้ ดังนั้นเนื่องจากไม่มีการโต้ตอบกับมนุษย์จึงรอรหัสผ่านตลอดไป ฉันจะบังคับให้จำจาก id_rsa.pub ได้อย่างไร
ฉันมีบริการสร้างอัตโนมัติซึ่งดาวน์โหลดจาก git private repository ปัญหาคือเมื่อพยายามโคลนที่เก็บจำเป็นต้องระบุรหัสผ่านเนื่องจากจำไม่ได้ ดังนั้นเนื่องจากไม่มีการโต้ตอบกับมนุษย์จึงรอรหัสผ่านตลอดไป ฉันจะบังคับให้จำจาก id_rsa.pub ได้อย่างไร
คำตอบ:
สำหรับผู้ใช้ Windows โปรดทราบว่านี่คือวิธีที่ฉันตั้งค่าสภาพแวดล้อม Git Bash เพื่อให้ฉันเข้าสู่ระบบครั้งเดียวเมื่อเริ่มต้นใช้งาน ฉันแก้ไข~/.bashrc
ไฟล์ของฉัน:
eval `ssh-agent`
ssh-add
ดังนั้นเมื่อฉันเริ่ม Git Bash ดูเหมือนว่า:
Welcome to Git (version 1.7.8-preview20111206)
(etc)
Agent pid 3376
Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:
Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)
และตอนนี้ฉันสามารถ ssh ไปยังเซิร์ฟเวอร์อื่นได้โดยไม่ต้องเข้าสู่ระบบทุกครั้ง
eval $(ssh-agent)
แทน
ssh-add ~/.ssh/myfile_rsa
copy > ~/.bashrc
ใน git bash เพื่อสร้างไฟล์ bashrc ใน windows ละเว้นข้อผิดพลาด
คำตอบนี้อธิบายวิธีรับชื่อผู้ใช้และรหัสผ่าน GitHub เพื่อจัดเก็บอย่างถาวรไม่ใช่ข้อความรหัสผ่านของคีย์ SSH
ใน Windows ให้เรียกใช้
$ git config --global credential.helper wincred
ซึ่งหมายความว่าในครั้งต่อไปที่คุณกดคุณจะต้องป้อนชื่อผู้ใช้และรหัสผ่านตามปกติ แต่จะถูกบันทึกไว้ในข้อมูลประจำตัวของ Windows คุณจะไม่ต้องป้อนข้อมูลอีกหลังจากนั้น
ในขณะที่กดปุ่มเพื่อ GitHub โดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านทุกครั้ง (Git ทุบตีใน Windows)
git
จะเปลี่ยนพฤติกรรมตามชุดคำสั่งการกำหนดค่า
ฉันไม่ต้องการพิมพ์ข้อความรหัสผ่าน SSH ของฉันเมื่อเปิดเทอร์มินัลใหม่ น่าเสียดายที่โซลูชันของ starmonkeyจำเป็นต้องพิมพ์รหัสผ่านสำหรับทุกเซสชัน แต่ฉันมีสิ่งนี้ใน.bash_profile
ไฟล์ของฉัน:
# Note: ~/.ssh/environment should not be used, as it
# already has a different purpose in SSH.
env=~/.ssh/agent.env
# Note: Don't bother checking SSH_AGENT_PID. It's not used
# by SSH itself, and it might even be incorrect
# (for example, when using agent-forwarding over SSH).
agent_is_running() {
if [ "$SSH_AUTH_SOCK" ]; then
# ssh-add returns:
# 0 = agent running, has keys
# 1 = agent running, no keys
# 2 = agent not running
ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
else
false
fi
}
agent_has_keys() {
ssh-add -l >/dev/null 2>&1
}
agent_load_env() {
. "$env" >/dev/null
}
agent_start() {
(umask 077; ssh-agent >"$env")
. "$env" >/dev/null
}
if ! agent_is_running; then
agent_load_env
fi
# If your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
agent_start
ssh-add
elif ! agent_has_keys; then
ssh-add
fi
unset env
สิ่งนี้จะจดจำข้อความรหัสผ่านของฉันสำหรับเซสชันเทอร์มินัลใหม่ด้วย ฉันต้องพิมพ์เพียงครั้งเดียวเมื่อฉันเปิดเทอร์มินัลแรกหลังจากบูตเครื่อง
ฉันต้องการเครดิตที่ฉันได้รับสิ่งนี้ เป็นการดัดแปลงงานของคนอื่น แต่จำไม่ได้ว่ามาจากไหน ขอบคุณผู้เขียนนิรนาม!
อัปเดต 2019-07-01:ฉันไม่คิดว่าทั้งหมดนี้จำเป็น ตอนนี้ฉันใช้งานได้อย่างสม่ำเสมอโดยตรวจสอบให้แน่ใจว่า.bash_profile
ไฟล์ของฉันรัน ssh-agent:
eval $(ssh-agent)
จากนั้นฉันตั้งssh
ค่าไฟล์กำหนดค่าดังนี้:
touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config
หากฉันเข้าใจคำถามอย่างถูกต้องแสดงว่าคุณใช้คีย์ SSH ที่ได้รับอนุญาตในบริการบิลด์แล้ว แต่คุณต้องการหลีกเลี่ยงการพิมพ์ข้อความรหัสผ่านสำหรับทุกโคลนหรือไม่
ฉันคิดได้สองวิธีในการทำสิ่งนี้:
หากบริการบิลด์ของคุณกำลังเริ่มทำงานแบบโต้ตอบ: ก่อนที่คุณจะเริ่มบริการบิลด์ให้เริ่มssh-agent
ด้วยการหมดเวลาที่ยาวนานเพียงพอ ( -t
ตัวเลือก) จากนั้นใช้ssh-add
(msysGit ควรมี) เพื่อเพิ่มคีย์ส่วนตัวทั้งหมดที่คุณต้องการก่อนเริ่มบริการบิลด์ คุณยังคงต้องพิมพ์รหัสผ่านทั้งหมด แต่เพียงครั้งเดียวต่อการเปิดตัวบริการ
หากคุณต้องการหลีกเลี่ยงการพิมพ์ข้อความรหัสผ่านออกไปเลยคุณสามารถลบรหัสผ่านออกจากคีย์ SSH ได้ตลอดเวลาตามที่อธิบายไว้ใน/server/50775/how-do-i-change-my- private-key-passphraseโดยการตั้งค่าข้อความรหัสผ่านใหม่ที่ว่างเปล่า สิ่งนี้ควรใช้กับรหัสผ่านทั้งหมด แต่ก็ปลอดภัยน้อยกว่าตัวเลือกก่อนหน้านี้ด้วยซ้ำ
เมื่อฉันพยายามกดรหัสฉันได้รับข้อผิดพลาดด้านล่าง:
$ git push origin dev
remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://naushadqamar-1@bitbucket.org/xxxx/xxxx-api.git/': The requested URL returned error: 403
หลังจากการค้นคว้าไม่กี่ชั่วโมงฉันพบว่าฉันจำเป็นต้องใช้คำสั่งด้านล่าง:
$ git config --global credential.helper cache
หลังจากดำเนินการคำสั่งข้างต้นฉันได้รับพร้อมท์ให้ป้อนชื่อผู้ใช้และรหัสผ่าน GitHub ของฉัน หลังจากให้ข้อมูลรับรองที่ถูกต้องแล้วฉันสามารถพุชรหัสของฉันได้
ทางออกที่เหมาะสมคือ:
เรียกใช้เทอร์มินัลเริ่มต้นของ Windows - cmd และรับไดเร็กทอรีของโปรไฟล์หลักของคุณ
echo %USERPROFILE%
เรียกใช้ Git Bash ในไดเร็กทอรีด้านบนและสร้าง.bashrc
ไฟล์ด้วยคำสั่ง
echo "" > .bashrc
เปิด.bashrc
ไฟล์ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและวางโค้ดจาก GitHub Helpลงในไฟล์นั้น:
env=~/.ssh/agent.env
...
COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
รีสตาร์ท Git Bash และจะถามรหัสผ่านของคุณ (ครั้งแรกเท่านั้น) และเสร็จสิ้น ไม่มีรหัสผ่านรบกวนอีกต่อไป
คุณต้องสร้างauthorized_keys
ไฟล์ภายใต้.ssh
โฟลเดอร์ของผู้ใช้ที่คุณจะเชื่อมต่อกับเซิร์ฟเวอร์ที่เก็บ ตัวอย่างเช่นสมมติว่าคุณใช้ชื่อผู้ใช้buildservice
บนrepo.server
คุณสามารถเรียกใช้:
cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys
จากนั้นคุณต้องตรวจสอบสิ่งต่อไปนี้:
ที่สอดคล้องคีย์ส่วนตัวจะนำเสนอในid_rsa
builservice@build.server:~/.shh/id_rsa
ลายนิ้วมือของ repo.server นั้นจะถูกเก็บไว้ในbuildservice@build.server:~/.ssh/known_hosts
ไฟล์ โดยปกติจะดำเนินการหลังจากครั้งแรกที่พยายามssh
เชื่อมต่อกับไฟล์repo.server
.
cat id_rsa.pub > .ssh/authorized_keys
จะเขียนทับคีย์ที่ได้รับอนุญาตที่มีอยู่ ใช้>>
เพิ่มแทนการเขียนทับ