ไม่สามารถเปิดการเชื่อมต่อกับตัวแทนการตรวจสอบความถูกต้องของคุณ


1605

ฉันพบข้อผิดพลาดของ:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

ฉันพยายามเพิ่มปุ่มและฉันได้รับข้อผิดพลาดด้านล่างนี้:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
คำถาม: เมื่อคุณผ่านทุกคำตอบในหน้านี้แล้วก็ไม่ทำงานเลย คุณจะทำอะไรต่อไป
Brandon Bertelsen

8
@BrandonBertelsen ลองใช้อันนี้: $ ssh-agent /bin/sh และ $ ssh-add $yourkey
shyam

@BrandonBertelsen ถัดไปคุณควรใช้git config --listเพื่อดูว่าคุณได้ตั้งค่าไว้หรือไม่credential.helperถ้าคุณมีคุณควรลบการตั้งค่านี้ออกเนื่องจากผู้ช่วยไม่ช่วยเหลือ
yoyo

คำตอบ:


2382

คุณเริ่มssh-agentหรือยัง

คุณอาจต้องเริ่มssh-agentก่อนที่คุณจะรันssh-addคำสั่ง:

eval `ssh-agent -s`
ssh-add

หมายเหตุว่านี้จะเริ่มต้นตัวแทนสำหรับmsysgit ทุบตีบน Windows หากคุณกำลังใช้เปลือกแตกต่างกันหรือระบบปฏิบัติการที่คุณอาจจำเป็นต้องใช้ที่แตกต่างของคำสั่งเช่นที่ระบุไว้ในคำตอบอื่น

ดูคำตอบต่อไปนี้:

  1. บ่น ssh-add: ไม่สามารถเปิดการเชื่อมต่อกับตัวแทนการตรวจสอบของคุณ
  2. Git push ต้องการชื่อผู้ใช้และรหัสผ่าน (มีคำแนะนำโดยละเอียดเกี่ยวกับวิธีใช้ ssh-agent)
  3. วิธีการเรียกใช้ตัวแทนการตรวจสอบ (git / ssh) .
  4. ไม่สามารถเปิดการเชื่อมต่อกับตัวแทนการตรวจสอบความถูกต้องของคุณ

ในการเริ่มต้นตัวแทน ssh โดยอัตโนมัติและอนุญาตเช่นเดียวกับการทำงานในหน้าต่างหลายคอนโซลดูเริ่มต้นตัวแทน ssh ในการเข้าสู่ระบบ

ทำไมเราต้องใช้evalแทนแค่ssh-agent?

เพื่อหาว่าทำไมดูคำตอบของโรบินสีเขียว

คีย์สาธารณะเทียบกับส่วนตัว

นอกจากนี้เมื่อใดก็ตามที่ฉันใช้ssh-addฉันมักจะเพิ่มกุญแจส่วนตัวให้กับมัน ไฟล์~/.ssh/id_rsa.pubดูเหมือนว่าเป็นกุญแจสาธารณะฉันไม่แน่ใจว่าจะใช้งานได้หรือไม่ คุณมี~/.ssh/id_rsaไฟล์ไหม หากคุณเปิดในโปรแกรมแก้ไขข้อความมันบอกว่ามันเป็นกุญแจส่วนตัวหรือไม่?


18
@xtian ฉันไม่แน่ใจว่าฉันเข้าใจปัญหานี้หรือไม่ ฉันไม่ทราบรายละเอียดที่แน่นอน แต่ฉันเดาว่าจะไม่ส่งคีย์ส่วนตัวผ่านเครือข่าย ผมคิดว่าssh-addเป็นเพียงการถอดรหัสคีย์ส่วนตัวเข้ารหัสบนเครื่องโฮสต์เพื่อที่จะสามารถนำมาใช้ในประเทศ ... มันไม่เคยส่งให้กับทุกคน ฉันเดาว่ามีเพียงกุญแจสาธารณะเท่านั้นที่ถูกส่งผ่านเครือข่าย ความเข้าใจของฉันไม่ถูกต้องหรือไม่?

6
Cupcake คุณใจดีเกินไป คุณพูดถูก ความผิดฉันเอง. เช่นที่นี่ ; ssh-add เพิ่มคีย์ส่วนตัวสำหรับ ssh-agent ของผู้ใช้ (กระบวนการทำงาน) สามารถดำเนินการในนามของลูกค้า / โฮสต์กับเซิร์ฟเวอร์ที่ยอมรับคีย์ rsa- อะไรก็ตาม โธ่ ฉันไม่รู้ว่าอะไรทำให้ฉันตื่นเต้นมาก
xtian

22
ฉันอยากรู้ว่าทำไมมันถึงได้eval ssh-agent -sผล แต่ssh-agentด้วยตัวมันเองไม่ได้
DanielM

13
@DanielM: SSH ต้องการสองสิ่งเพื่อใช้ ssh-agent: อินสแตนซ์ ssh-agent ที่ทำงานในพื้นหลังและชุดตัวแปรสภาพแวดล้อมที่บอก SSH ซึ่งซ็อกเก็ตนั้นควรใช้เพื่อเชื่อมต่อกับตัวแทน ( SSH_AUTH_SOCKIIRC) หากคุณเพียงแค่เรียกใช้ssh-agentตัวแทนจะเริ่ม แต่ SSH จะไม่มีความคิดที่จะหาได้
Vanessa Phipps

4
ขอบคุณที่ตอบกลับ ฉันเพิ่งสังเกตเห็นว่าคุณใช้ backquote ในคำสั่ง ฉันสับสนมากว่าทำไม backquote (`) ทำงานกับคำสั่ง eval แต่ไม่ใช่คำพูดเดี่ยว / คู่ (',") บนเปลือก bash ของฉัน
Weishi Zeng

539

ฉันลองวิธีแก้ไขปัญหาอื่น ๆ เพื่อประโยชน์ ฉันค้นคว้าเพิ่มเติมและพบว่าคำสั่งต่อไปนี้ใช้ได้ผล ฉันใช้ Windows 7 และGit Bash

eval $(ssh-agent)

ข้อมูลเพิ่มเติมใน: https://coderwall.com/p/rdi_wq


14
ทำงานบน Windows 8 ด้วย
Andreas Rudolph

ฉันใช้ Windows 7 และ Git Bash ด้วยและคำตอบของฉันก็ใช้ได้เช่นกัน มันยอดเยี่ยมที่คุณสามารถทำได้ด้วยวิธีนี้เช่นกัน

2
เยี่ยมมาก !! ทำงานกับ windows 10 ด้วย
NitinM

1
ทำงานกับ Manjaro
code_flow

1
$ eval "$ (ssh-agent -s)" ใช้ได้กับฉันใน Windows 10
Andrew Anderson

261

คำสั่งต่อไปนี้ทำงานให้ฉัน ฉันใช้ CentOS

exec ssh-agent bash

3
ขอบคุณสิ่งนี้ใช้ได้กับฉันฉันวิ่ง 'exec ssh-agent zsh' สำหรับเปลือกของฉัน
jasonmcclurg

2
ตาม"คำตอบ" ที่ถูกลบไปแล้วมันก็ใช้ได้กับ Amazon Linux AMI ด้วยเช่นกัน ฉันเดาว่าเป็นโซลูชัน Unix / Linux / * nix

4
ฉันลงเรือคอนเทนเนอร์แล้วssh-add my.id_rsaจะล้มเหลว แต่exec ssh-agent zshให้สภาพแวดล้อมที่ฉันสามารถทำได้ssh-addโดยไม่มีปัญหา และฉันในภาชนะของฉันนักเทียบท่า :)
markuz-GJ

ใครช่วยอธิบายสั้น ๆ ว่าปัญหาน่าจะเป็นไปได้ไหม ขอบคุณ :) สิ่งนี้ใช้ได้กับ Ubuntu 14.04 ของฉันด้วย
harkirat1892

ทำงานบน raspbian ด้วย
mega_creamery

215

MsysGit หรือ Cygwin

หากคุณใช้ Msysgit หรือ Cygwin คุณสามารถค้นหาบทช่วยสอนที่ดีที่SSH-Agent ใน msysgit และ cygwin และ bash :

  1. เพิ่มไฟล์ที่เรียกว่า.bashrcโฟลเดอร์บ้านของคุณ

  2. เปิดไฟล์และวางใน:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. นี้อนุมานว่ากุญแจสำคัญของคุณอยู่ในการชุมนุม~/.ssh/id_rsaที่ตั้ง หากไม่มีให้รวมเส้นทางแบบเต็มหลังจากssh-addคำสั่ง

  4. เพิ่มหรือสร้างไฟล์ที่~/.ssh/configมีเนื้อหา

    ForwardAgent yes
    

    ในบทช่วยสอนดั้งเดิมForwardAgentพารามิเตอร์คือYesแต่มันเป็นตัวพิมพ์ผิด ใช้ตัวพิมพ์เล็กทั้งหมดหรือคุณจะได้รับข้อผิดพลาด

  5. เริ่ม Msysgit ใหม่ มันจะขอให้คุณป้อนข้อความรหัสผ่านของคุณหนึ่งครั้งและนั่นก็คือ (จนกว่าคุณจะสิ้นสุดเซสชั่นมิฉะนั้น ssh-agent ของคุณจะถูกฆ่า)

Mac / OS X

หากคุณไม่ต้องการที่จะเริ่มต้นใหม่ตัวแทน ssh ทุกครั้งที่คุณเปิด terminal ให้ตรวจสอบพวงกุญแจ ตอนนี้ฉันอยู่บน Mac ดังนั้นฉันจึงใช้ tutorial ssh-agent กับ zsh & keychain บน Mac OS Xเพื่อตั้งค่า แต่ฉันแน่ใจว่าการค้นหาของ Google จะมีข้อมูลมากมายสำหรับ Windows

อัปเดต : ทางออกที่ดีกว่าสำหรับ Mac คือการเพิ่มคีย์ของคุณใน Mac OS Keychain:

ssh-add -K ~/.ssh/id_rsa

เรียบง่ายเหมือนที่


1
FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

1
เมื่อฉันทำeval `ssh-agent -s`กระบวนการไม่หยุดเมื่อฉันออกจาก cygwin
คิริล

มีวิธีการตั้งค่าการตั้งค่าสำหรับ Windows / gitbash ดังนั้นคุณไม่จำเป็นต้องทำมันทุกครั้งหรือไม่?
mix3d

4
มันควรจะเป็นps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)- มิฉะนั้น ssh-agent ใหม่จะเริ่มขึ้นทุกครั้ง ฆ่าเครื่องของฉันทุกครั้งแล้วเมื่อผู้ใช้มี cronjobs
ทำลาย

3
ForwardAgent yesไม่จำเป็นและเป็นความเสี่ยงด้านความปลอดภัยที่ไม่ใช่เชิงทฤษฎีหากตั้งค่าไว้สำหรับเซิร์ฟเวอร์ที่ไม่น่าเชื่อถือ การเข้าถึงตัวแทนกุญแจของคุณควรทำงานโดยไม่คำนึงถึงการตั้งค่านี้
SeldomNeedy

208

ไม่สามารถเปิดการเชื่อมต่อกับตัวแทนการตรวจสอบความถูกต้องของคุณ

ในการแก้ไขข้อผิดพลาดนี้:

ทุบตี:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

จากนั้นใช้ssh-addตามปกติ


เคล็ดลับร้อน:

ฉันลืมสิ่งที่จะพิมพ์สำหรับคำสั่ง ssh-agent ด้านบนเสมอดังนั้นฉันจึงสร้างนามแฝงใน.bashrcไฟล์ของฉันดังนี้:

alias ssh-agent-cyg='eval `ssh-agent -s`'

ตอนนี้แทนที่จะใช้ssh-agentฉันสามารถใช้ssh-agent-cyg

เช่น

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

แหล่งที่มาดั้งเดิมของการแก้ไข:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


3
คุณจะต้องเรียกใช้คำสั่งทุกครั้งที่คุณจะมีก่อนหน้านี้วิ่งeval ssh-agentฉันใช้นามแฝงตอนนี้ดูคำตอบที่ปรับปรุงแล้วสำหรับวิธีการทำสิ่งนี้
Chris Snow

1
FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

ฉันยังต้องใช้ข้อมูลจำเพาะ ssh แทน https (ดูhelp.github.com/articles/changing-a-remote-s-url )
RunHolt

1
คุณครับคุณยอดเยี่ยม ขอบคุณ ** ผมประสบปัญหาเดียวกันในขณะที่โคลน repo bitbucket ผมติดตั้งแล้วคีย์ SSH fatal: Could not read from remote repository.แต่เก็บไว้รับข้อผิดพลาด:
Nishant Ghodke

ทำงานให้ฉันใน windows 10 และติดตั้ง bash git
35425

116

ฉันประสบปัญหาเดียวกันสำหรับ Linux และนี่คือสิ่งที่ฉันทำ:

โดยทั่วไปแล้วคำสั่ง ssh-agent จะเริ่มต้นเอเจนต์ แต่ไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมเพื่อให้ทำงาน มันแค่ส่งเอาต์พุตตัวแปรเหล่านั้นไปยังเชลล์

คุณต้อง:

eval `ssh-agent`

แล้วเพิ่ม ssh ดูไม่สามารถเปิดการเชื่อมต่อกับการตรวจสอบตัวแทนของคุณ


1
FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

ทำงานให้ฉันด้วยขณะที่มีปัญหาในการใช้ boot2docker บน Windows
Veve

นี่คือสิ่งที่ฉันใช้
Tom

115

ssh-add และ ssh (สมมติว่าคุณกำลังใช้การใช้งาน openssh) ต้องการตัวแปรสภาพแวดล้อมเพื่อทราบวิธีพูดคุยกับเอเจนต์ ssh หากคุณเริ่มต้นเอเจนต์ในหน้าต่างพรอมต์คำสั่งอื่นกับหน้าต่างที่คุณใช้อยู่ตอนนี้หรือถ้าคุณเริ่มต้นอย่างไม่ถูกต้องทั้ง ssh-add และ ssh จะไม่เห็นชุดตัวแปรสภาพแวดล้อม (เพราะตัวแปรสภาพแวดล้อมถูกตั้งค่าไว้ในคำสั่ง แจ้งให้มันตั้งอยู่ใน)

คุณไม่ได้บอกว่าคุณใช้ ssh เวอร์ชันไหน แต่ถ้าคุณใช้ cygwin คุณสามารถใช้สูตรนี้จากSSH Agent บน Cygwin :

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

สิ่งนี้จะเริ่มต้นเอเจนต์โดยอัตโนมัติสำหรับแต่ละหน้าต่างพรอมต์คำสั่งใหม่ที่คุณเปิด (ซึ่งจะดีที่สุดหากคุณเปิดพรอมต์คำสั่งหลายรายการในหนึ่งเซสชัน แต่อย่างน้อยก็ควรจะทำงาน)


1
FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

9
ฉันเชื่อมโยงที่นี่จากคำถาม SO อื่น ฉันสามารถถามได้หรือไม่ว่าเหตุใดจึงจำเป็นต้องเพิ่มสิ่งนี้ลงในไฟล์ Bash config ในเครื่องของฉันทั้งหมดที่ฉันต้องทำก็คือเรียกใช้eval $(ssh-agent)และฉันสามารถใช้ ssh ได้โดยไม่ต้องใช้รหัสผ่านสำหรับหน้าต่างเทอร์มินัลใหม่ทุกอัน
Andy J

ไม่น่าจะเป็นไปได้เว้นแต่คุณจะเปิดตัวเทอร์มินัลใหม่จากเทอร์มินัลนั้น
Robin Green

114

วิ่ง

ssh-agent bash
ssh-add

เพื่อรับรายละเอียดเพิ่มเติมคุณสามารถค้นหา

ssh-agent

หรือเรียกใช้

man ssh-agent

7
ฉันอยากจะแนะนำว่าถ้าคุณกำลังทำงานกับ git bash บน windows ให้ลองทำสิ่งนี้
Neeraj Sewani

@ neer17 สิ่งนี้ทำให้ฉันสามารถใช้ssh-copy-idบน Ubuntu ไม่แน่ใจว่าทำไมฉันไม่สามารถเพิ่มคีย์โดยไม่ต้องใช้ssh-agentเพื่อเปิดใช้งานการทุบตี
SomeGuyOnAComputer

2
นี่คือหนึ่งสำหรับ Windows! (ทดสอบกับ W10pro build 1809 และ git 2.21.0)
Alfabravo

ฉันใช้ ZSH และสิ่งนี้ได้ผลกับฉัน:ssh-agent zsh; ssh-add
sirboderafael

97

ลองทำตามขั้นตอนต่อไปนี้:

1) เปิด Git Bash แล้วเรียกใช้: cd ~/.ssh

2) ลองเรียกใช้ตัวแทน: eval $(ssh-agent)

3) ตอนนี้คุณสามารถเรียกใช้คำสั่งต่อไปนี้: ssh-add -l


9
นี่เป็นทางออกเดียวที่ได้ผลสำหรับฉัน (บน windows 7) ครั้งแรกที่ฉันใช้ps aux | grep sshและkillคำสั่งในคำตอบของริคเพื่อฆ่าตัวแทน หลังจากนั้นssh-addทำงานโดยไม่ใช้สวิตช์ -l (การใช้ -l ทำให้เกิดข้อผิดพลาด) eval 'ssh-agent'ในคำตอบของ Rick ไม่ทำงานฉันต้องใช้eval $(ssh-agent)คำตอบของ Chechoro ที่นี่
Frug

6
+1 ฉันมีปัญหาเดียวกันกับ OP (Windows 7) และนี่เป็นทางออกเดียวที่เหมาะกับฉัน
Weblurk

1
FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

2
@ Frug มันคือ backticks ไม่ใช่อะโพสโทรฟี ในเชลล์สคริปต์ที่หมายถึงการดำเนินการสิ่งที่มีอยู่ภายใน $(ssh-agent)เทียบเท่ากับ`ssh-agent`แต่อ่านได้มากขึ้น
MM

96

แทนที่จะใช้$ ssh-agent -sฉันใช้$ eval `ssh-agent -s`เพื่อแก้ปัญหานี้

นี่คือสิ่งที่ฉันทำทีละขั้นตอน (ขั้นตอนที่ 2 เป็นต้นไปใน GitBash):

  1. ทำความสะอาดโฟลเดอร์. ssh ของฉันที่ C:\user\<username>\.ssh\
  2. สร้างคีย์ SSH ใหม่
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. ตรวจสอบว่า id กระบวนการ (เอเจนต์ ssh) ทำงานอยู่หรือไม่
    $ ps aux | grep ssh
  4. (ไม่บังคับ) หากพบข้อใดข้อหนึ่งในขั้นตอนที่ 3 ให้ฆ่าสิ่งเหล่านั้น
    $ kill <pids>
  5. เริ่มต้นเอเจนต์ ssh
    $ eval `ssh-agent -s`
  6. เพิ่มคีย์ ssh ที่สร้างในขั้นตอนที่ 2 ถึงเอเจนต์ ssh
    $ ssh-add ~/.ssh/id_rsa

3
'eval' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก, โปรแกรมที่ทำงานได้หรือไฟล์แบตช์
Chutipong Roobklom

คุณสามารถรีสตาร์ทเอเจนต์โดยใช้ eval ssh-agent -sและเพิ่มคีย์เก่าโดยใช้ ssh-add ~ / .ssh / id_rsa หากคุณสร้างคีย์ SSH ใหม่คุณจะต้องอัปเดตรหัสนั้นในบริการทั้งหมดของคุณเช่น GitHub, Bitbucket, ฯลฯ
Mohit Satish Pawar

มีวิธีที่ทำให้ Windows เริ่มต้นใหม่ได้หรือไม่ หลังจากการรีสตาร์ทมันไม่ทำงานจนกว่าฉันจะเปิดตัว "eval ssh-agent -s" และ "ssh-add ~ / .ssh / id_rsa" อีกครั้ง
Michal Vician

1
หลังจากค้นหาเป็นเวลานานนี่เป็นวิธีแก้ปัญหาที่ใช้ได้
Sujit.Warrier

คำอธิบายที่ดี!
avivamg

56

ใน Windows 10 ฉันลองตอบคำถามทั้งหมดที่นี่ แต่ดูเหมือนว่าไม่มีคำตอบใด ๆ ในความเป็นจริงพวกเขาให้เบาะแส ในการแก้ปัญหาคุณต้องมี 3 คำสั่ง แนวคิดของปัญหานี้คือ ssh-add ต้องการตัวแปรสภาวะแวดล้อม SSH_AUTH_SOCK และ SSH_AGENT_PID ที่จะตั้งค่าด้วยพา ธ ไฟล์ถุงเท้า ssh-agent ปัจจุบันและหมายเลข pid

ssh-agent -s > temp.txt

นี่จะบันทึกเอาต์พุตของ ssh-agent ในไฟล์ เนื้อหาไฟล์ข้อความจะเป็นดังนี้:

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

คัดลอกบางอย่างเช่น "/tmp/ssh-kjmxRb2764/agent.2764" จากไฟล์ข้อความและเรียกใช้คำสั่งต่อไปนี้โดยตรงในคอนโซล:

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

คัดลอกบางอย่างเช่น "3044" จากไฟล์ข้อความและเรียกใช้คำสั่งต่อไปนี้ในคอนโซลโดยตรง:

set SSH_AGENT_PID=3044

ตอนนี้เมื่อตัวแปรสภาพแวดล้อม (SSH_AUTH_SOCK และ SSH_AGENT_PID) ถูกตั้งค่าสำหรับเซสชันคอนโซลปัจจุบันให้รันคำสั่ง ssh-add ของคุณและจะไม่ล้มเหลวอีกครั้งในการเชื่อมต่อเอเจนต์ ssh


2
ขอบคุณ! นี่คือสิ่งที่ฉันต้องการ
Isochronous

6
ไม่ยังคงเหมือนเดิม
Jaskey

3
ขั้นตอนเหล่านี้เหมือนกับการทำ 'eval $ (ssh-agent)'
K.Nicholas

2
แก้ไขใน Windows 10 ของฉัน! ขอบคุณ!
ntl

1
สิ่งนี้ช่วยฉันในการบันทึกปัญหาบน Linux ... เพียงแค่ต้องการแทนที่setด้วยexport
greg hor

30

สิ่งหนึ่งที่ฉันเจอคือมันevalไม่ได้ผลสำหรับฉันที่ใช้ Cygwin สิ่งที่เหมาะกับฉันคือssh-agent ssh-add id_rsaสิ่งที่ทำงานสำหรับฉันคือ

หลังจากนั้นฉันเจอปัญหาที่ไพรเวตคีย์ของฉันเปิดเกินไปโซลูชันที่ฉันจัดการเพื่อค้นหา (จากที่นี่ ):

chgrp Users id_rsa

เช่นกัน

chmod 600 id_rsa

ในที่สุดฉันก็สามารถใช้:

ssh-agent ssh-add id_rsa

คุณใช้eval `ssh-agent`กับ backticks `รอบ ๆssh-agentดังที่แสดงในคำตอบของฉันหรือไม่? มันใช้ได้ดีสำหรับฉันใน Cygwin ดูเหมือนว่าคุณจะถูกต้องที่ssh-agent ssh-addยังใช้งานได้อย่างน้อยใน msysgit Bash อย่างไรก็ตามทราบว่าเป็นกุญแจสำคัญในการเริ่มต้นที่ใช้เพื่อให้คุณไม่จำเป็นต้องระบุว่ามีid_rsa ssh-agent ssh-add id_rsa

ฉันเชื่อว่าฉันใช้ backticks แล้ว แต่สำหรับฉันยังคงไม่มีลูกเต๋า
Vnge

1
OMG คุณแก้ปัญหาความเดือดร้อนสองสามชั่วโมงของฉัน ขอบคุณ!
Chee Loong เร็ว ๆ นี้

คำตอบนี้ใช้ได้สำหรับฉันด้วยการทุบตี
Lsakurifaisu

27

เพื่อขยายคำตอบของ n3o สำหรับ Windows 7 ...

ปัญหาของฉันเป็นจริงที่ไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมที่จำเป็นบางอย่างและ n3o ถูกต้องที่ ssh-agent บอกวิธีตั้งค่าตัวแปรสภาพแวดล้อมเหล่านั้น แต่ไม่ได้ตั้งค่าจริง ๆ

เนื่องจาก Windows ไม่อนุญาตให้คุณ "eval" นี่คือสิ่งที่ต้องทำแทน:

เปลี่ยนทิศทางเอาต์พุตของ ssh-agent ไปยังแบตช์ไฟล์ด้วย

ssh-agent > temp.bat

ตอนนี้ใช้ตัวแก้ไขข้อความเช่น Notepad เพื่อแก้ไข temp.bat สำหรับแต่ละสองบรรทัดแรก: - ใส่คำว่า "set" และเว้นวรรคที่จุดเริ่มต้นของบรรทัด - ลบเซมิโคลอนแรกและทุกอย่างที่ตามมา

ตอนนี้ลบบรรทัดที่สาม temp.bat ของคุณควรมีลักษณะดังนี้:

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

เรียกใช้ temp.bat สิ่งนี้จะตั้งค่าตัวแปรสภาพแวดล้อมที่จำเป็นสำหรับ ssh-add ให้ทำงาน


FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

ฉันยังคงได้รับCould not open a connection to your authentication agent.เมื่อใช้ ssh-add ใน Win10 PowerShell
Kebman

19

ฉันเพิ่งได้ทำงานนี้ เปิด~/.ssh/configไฟล์ของคุณ

ผนวกสิ่งต่อไปนี้ -

Host github.com
 IdentityFile ~/.ssh/github_rsa

หน้าเว็บที่ให้คำแนะนำการตั้งค่า SSH ให้กับ Git บอกว่าการเว้นวรรคเดียวนั้นสำคัญ ... แม้ว่าฉันจะมีการกำหนดค่าจาก Heroku ที่ไม่มีพื้นที่นั้นและทำงานได้อย่างถูกต้อง


1
สิ่งนี้ไม่ช่วยในการป้อนวลีรหัสผ่านสำหรับคีย์ SSH
alesch

1
หากคุณไม่ต้องการป้อนข้อความรหัสผ่านให้สร้างรหัสโดยไม่มีรหัส ไม่มีจุดที่จะมีวลีรหัสผ่านหากคุณเพิ่งจะเก็บมันไว้ในสคริปต์ของคุณ
Paul Becotte

นั่นคือจุดรวมของการใช้ ssh-agent รหัสผ่านไปยังกุญแจของคุณจะถูกเก็บไว้ในพวงกุญแจที่ปลอดภัยซึ่งจัดการโดย ssh-agent
alesch

นี่คือคำตอบที่ดีที่สุดสำหรับฉันที่นี่ มีปัญหามากมายกับ ssh-agent เริ่มนับพันครั้งใน Windows 7 และกับดักฆ่านั่นไม่ได้ทำเคล็ดลับ ฉันไม่รังเกียจที่จะไม่มีข้อความรหัสผ่านบนคอมพิวเตอร์ส่วนตัวที่บ้าน
Fleshgrinder

18

หากคุณทำตามคำแนะนำเหล่านี้ปัญหาของคุณจะได้รับการแก้ไข

หากคุณใช้เครื่อง Mac หรือ Linux ให้พิมพ์:

eval "$(ssh-agent -s)"

หากคุณใช้เครื่อง Windows ให้พิมพ์:

ssh-agent -s

13

ฉันขอเสนอวิธีแก้ไขปัญหาอื่น หากคุณเพิ่งติดตั้ง Git 1.8.2.2 หรือราว ๆ นั้นและคุณต้องการเปิดใช้งาน SSH ให้ทำตามคำแนะนำที่ดี

ทุกอย่างผ่านไปยังขั้นตอนที่ 5.6 ซึ่งคุณอาจพบอุปสรรคเล็กน้อย หากตัวแทน SSH กำลังทำงานอยู่คุณอาจได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้เมื่อคุณรีสตาร์ททุบตี

Could not open a connection to your authentication agent

หากคุณใช้คำสั่งต่อไปนี้เพื่อดูว่ากระบวนการ ssh-agent มากกว่าหนึ่งกระบวนการกำลังทำงานอยู่หรือไม่

ps aux | grep ssh

หากคุณเห็นบริการ ssh-agent มากกว่าหนึ่งรายการคุณจะต้องฆ่ากระบวนการเหล่านี้ทั้งหมด ใช้คำสั่ง kill ดังต่อไปนี้ (PID จะไม่ซ้ำกันในคอมพิวเตอร์ของคุณ)

kill <PID>

ตัวอย่าง:

kill 1074

หลังจากคุณลบกระบวนการ ssh-agent ทั้งหมดแล้วให้รันpx aux | grep sshอีกครั้งเพื่อให้แน่ใจว่ามันหายไปจากนั้นรีสตาร์ท Bash

Voila ตอนนี้คุณควรได้รับสิ่งนี้:

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

ตอนนี้คุณสามารถดำเนินการต่อในขั้นตอนที่ 5.7 ขึ้นไป


ให้ฉันผ่านสิ่งกีดขวางบนถนน, tyvm
Jason Fingar

แค่อยากจะเพิ่มมันในกรณีของฉันรายการหนึ่งในรายการคือกระบวนการ grep ที่เราทำการค้นหาด้วย แต่มันก็ถูกฆ่าไปแล้วหลังจากการทำงานของมัน เล่นสำนวนไม่มีเจตนา
Ryan Mortensen

FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

13

สำหรับผู้ใช้หน้าต่างฉันพบว่า cmd eval `ssh-agent -s`ไม่ทำงาน แต่ใช้ git bash ทำงานได้eval `ssh-agent -s`; ssh-add KEY_LOCATIONดีและทำให้แน่ใจว่าบริการ windows "OpenSSH Key Management" ไม่ได้ปิดการใช้งาน


12

หมายเหตุ:นี่เป็นคำตอบสำหรับคำถามนี้ซึ่งถูกรวมเข้ากับคำถามนี้ คำถามนั้นสำหรับ Windows 7 หมายถึงคำตอบของฉันสำหรับ Cygwin / MSYS / MSYS2 หนึ่งนี้ดูเหมือนว่าสำหรับบางยูนิกซ์ที่ฉันจะไม่คาดหวังตัวแทน SSH จำเป็นต้องได้รับการจัดการเช่นนี้

สิ่งนี้จะเรียกใช้ตัวแทน SSH และรับรองความถูกต้องเฉพาะครั้งแรกที่คุณต้องการไม่ใช่ทุกครั้งที่คุณเปิด Bash terminal สามารถใช้สำหรับโปรแกรมใด ๆ ที่ใช้ SSH โดยทั่วไปรวมถึง ssh เองและ scp เพียงเพิ่มลงใน/etc/profile.d/ssh-helper.sh:

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "$@"; }

1
FYI: ผสานจากstackoverflow.com/questions/4083079/…
Shog9

2
ดูเหมือนว่ากระบวนการ ssh-agent จะไม่ได้เชื่อมโยงกับเทอร์มินัลเดียวกันที่ใช้ในการรัน ฉันเดาps -A | grep ssh-agentหรือps h -C ssh-agentควรใช้แทนps | grep ssh-agent
alexis

1
อาจไม่แนะนำให้ใช้เครื่องหมายขีดกลางในชื่อฟังก์ชัน ผมไม่ทราบว่าทำไม แต่อ่านนี้ ตัวอย่างเช่นฉันพบว่าecho ssh-auth | bashจะล้มเหลว
alexis

1
คุณสามารถทำได้เพียงแค่นี้อีกเล็กน้อย เพียงตรวจสอบว่ามันกำลังทำงานอยู่และกำหนดตัวแปร env แล้วเพิ่มAddKeysToAgent yes(หรือใช้prompt) เพื่อเข้า SSH ปรับแต่งของคุณ (ใช้Host *สำหรับโฮสต์ทั้งหมด.) วิธีการที่คุณจะได้รับการถามรหัสผ่าน SSH ถ้าคุณจริงพยายามเชื่อมต่อมิฉะนั้นคุณอาจจะมีการถามรหัสผ่านสำหรับการที่เรียบง่ายเป็นหรือgit diff git status
ST-DDT

2
$HOME/.sshอาจแข็งแกร่งกว่า/home/$(whoami)/.ssh
Ari Sweedler

12

ฉันมีปัญหาเดียวกันในUbuntuขณะที่วิธีแก้ปัญหาอื่นไม่ช่วยฉัน ในที่สุดฉันก็รู้ว่าปัญหาของฉันคืออะไร ฉันสร้างsshกุญแจของฉันใน/root/.sshโฟลเดอร์ดังนั้นแม้ตอนที่ฉันssh-addรูทมันก็ไม่สามารถทำงานและพูดต่อไปได้

Could not open a connection to your authentication agent.

ฉันสร้างกุญแจสาธารณะและกุญแจส่วนตัวใน/home/myUsername/โฟลเดอร์และฉันใช้

ssh-agent /bin/sh

จากนั้นฉันก็วิ่ง

ssh-add /home/myUsername/.ssh/id_rsa

และปัญหาได้รับการแก้ไขด้วยวิธีนี้

หมายเหตุ:สำหรับการเข้าถึงพื้นที่เก็บข้อมูลของคุณในการgitเพิ่มรหัสผ่านคอมไพล์ของคุณเมื่อคุณกำลังสร้างคีย์ด้วยsshssh-keygen -t rsa -C "your git email here"


9

ใช้พารามิเตอร์ -A เมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์ตัวอย่าง:

ssh -A root@myhost

จากหน้าคน:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

มันทำอะไรและทำไม
erikbwork

ตามเพจ man ... man ssh ... -A เปิดใช้งานการส่งต่อการเชื่อมต่อของเอเจนต์การพิสูจน์ตัวตน สิ่งนี้ยังสามารถระบุได้บนแต่ละโฮสต์ในไฟล์การกำหนดค่า
Scott Stensland

8

โซลูชันพื้นฐานในการเรียกใช้ssh-agentมีคำตอบในหลายคำตอบ อย่างไรก็ตามการรันssh-agentหลายครั้ง (ต่อเทอร์มินัลที่เปิดอยู่หรือต่อการล็อกอินระยะไกล) จะสร้างสำเนาจำนวนมากที่ssh-agentทำงานอยู่ในหน่วยความจำ สคริปต์ที่จะแนะนำให้หลีกเลี่ยงปัญหาที่มีความยาวและความจำเป็นในการเขียนและ / หรือสำเนาแยกไฟล์หรือจำเป็นต้องเขียนสตริงมากเกินไปในหรือ~/.profile ~/.schrcผมขอแนะนำวิธีแก้ปัญหาสายสองอย่างง่าย ๆ :

สำหรับsh , ทุบตี , ฯลฯ :

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

สำหรับcsh , tcshฯลฯ :

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`

ที่นี่คืออะไร:

  • ค้นหากระบวนการssh-agentตามชื่อและตามผู้ใช้ปัจจุบัน
  • สร้างเชลล์สคริปต์ไฟล์ที่เหมาะสมโดยการเรียกssh-agentใช้และรันssh-agentเองหากไม่ssh-agentพบกระบวนการผู้ใช้ปัจจุบัน
  • ประเมินเชลล์สคริปต์ที่สร้างขึ้นซึ่งกำหนดค่าสภาพแวดล้อมที่เหมาะสม

ไม่จำเป็นต้องปกป้องเชลล์สคริปต์ที่สร้างขึ้น~/.ssh-agent.tcshหรือ~/.ssh-agent.shจากการเข้าถึงของผู้ใช้รายอื่นเนื่องจาก: การสื่อสารในตอนแรกด้วยssh-agentการประมวลผลผ่านซ็อกเก็ตที่มีการป้องกันที่ไม่สามารถเข้าถึงได้กับผู้ใช้งานอื่นและที่สองผู้ใช้อื่นสามารถพบssh-agentซ็อกเก็ตที่เรียบง่ายโดยไฟล์ที่มีการแจงนับใน/tmp/ไดเรกทอรี เท่าที่เกี่ยวกับการเข้าถึงssh-agentกระบวนการก็เป็นสิ่งเดียวกัน


6

ลองทำสิ่งต่อไปนี้:

ssh-agent sh -c 'ssh-add && git push heroku master'

1
ดูเหมือนจะเป็นวิธีที่สะอาดในการทำเช่นนี้
Leon Grapenthin

6

อ่านคำตอบของ @ cupcakeสำหรับคำอธิบาย ที่นี่ฉันพยายามทำให้การแก้ไขเป็นแบบอัตโนมัติเท่านั้น

หากคุณใช้เทอร์มินัล Cygwin พร้อม BASH ให้เพิ่มรายการต่อไปนี้ลงในไฟล์ $ HOME / .bashrc สิ่งนี้จะเริ่มต้น ssh-agent หนึ่งครั้งในเทอร์มินัล Bash แรกและเพิ่มคีย์ไปยัง ssh-agent (ไม่แน่ใจว่าจำเป็นต้องใช้กับ Linux หรือไม่)

###########################
# start ssh-agent for
# ssh authentication with github.com
###########################
SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh
if [ ! -e $SSH_AUTH_SOCK_FILE ]; then
    # need to find SSH_AUTH_SOCK again.
    # restarting is an easy option
    pkill ssh-agent
fi
# check if already running
SSH_AGENT_PID=`pgrep ssh-agent`
if [ "x$SSH_AGENT_PID" == "x" ]; then
#   echo "not running. starting"
    eval $(ssh-agent -s) > /dev/null
    rm -f $SSH_AUTH_SOCK_FILE
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE
    ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null
#else
#   echo "already running"
fi
source $SSH_AUTH_SOCK_FILE

อย่าลืมเพิ่มคีย์ที่ถูกต้องในคำสั่ง "ssh-add"


5

ฉันมีปัญหานี้เมื่อฉันเริ่มต้น ssh-agent เมื่อมันกำลังทำงานอยู่ สับสน เพื่อดูว่าเป็นกรณีนี้ใช้

eval $(ssh-agent)

เพื่อดูว่านี่เป็นสิ่งเดียวกับที่คุณคิดหรือไม่ ในกรณีของฉันมันแตกต่างจากที่ฉันเพิ่งเริ่ม

หากต้องการตรวจสอบเพิ่มเติมหากคุณมี ssh-agent มากกว่าหนึ่งตัวที่ทำงานอยู่คุณสามารถตรวจสอบ:

ps -ef | grep ssh

2
ฉันคิดว่าการรันeval $(ssh-agent)ควรจะสร้างเอเจนต์ใหม่ด้วย PID ที่แตกต่างกันทุกครั้งแม้ว่าฉันจะผิด

4

ฉันมีปัญหาที่คล้ายกันเมื่อฉันพยายามทำให้เรื่องนี้ทำงานบน Windows เพื่อเชื่อมต่อกับที่เก็บข้อมูลผ่าน ssh

นี่คือทางออกที่ได้ผลสำหรับฉัน

  1. ปรากฎว่าฉันกำลังเรียกใช้ตัวแทน Pageant ssh ในกล่อง Windows ของฉัน - ฉันจะตรวจสอบสิ่งที่คุณกำลังทำงานอยู่ ฉันสงสัยว่ามันเป็น Pageant เนื่องจากเป็นค่าเริ่มต้นกับ Putty และ winScp

  2. ssh-add ไม่ทำงานจากบรรทัดคำสั่งด้วยเอเจนต์ประเภทนี้

  3. คุณต้องเพิ่มไพรเวตคีย์ผ่านหน้าต่าง UI ของการประกวดซึ่งคุณสามารถรับได้โดยดับเบิลไอคอน Pageant ในทาสก์บาร์ (เมื่อมันเริ่มขึ้น)

  4. ก่อนที่คุณจะเพิ่มคีย์ใน Pageant คุณต้องแปลงเป็นรูปแบบ PPK คำแนะนำแบบเต็มมีอยู่ที่นี่วิธีแปลงคีย์ SSH เป็นรูปแบบ ppk

  5. อย่างนั้นแหละ. เมื่อฉันอัพโหลดกุญแจของฉันเพื่อซ่อนฉันสามารถใช้ SourceTree เพื่อสร้าง repo ภายในเครื่องและทำการโคลนรีโมท

หวังว่านี่จะช่วย ...


3

ฉันแก้ไขข้อผิดพลาดโดยการบังคับให้หยุดกระบวนการ git (เอเจนต์ ssh) จากนั้นให้ถอนการติดตั้ง Git แล้วติดตั้ง Git อีกครั้ง


2
ฉันสงสัยว่าสิ่งที่คุณต้องทำคือเพียงแค่ฆ่ากระบวนการตัวแทนใด ๆ ที่มีอยู่จากนั้นรีสตาร์ทหนึ่งกระบวนการแทนที่จะต้องติดตั้ง Git ใหม่

3

ใช้ Git Bash กับ Win8.1E ความละเอียดของฉันเป็นดังนี้:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

ทำไมมันจึงเป็นสิ่งจำเป็นที่จะส่งออกไปยัง/dev/null? คำตอบของคุณโดยทั่วไปจะเป็นสิ่งเดียวกันกับคนนี้

นอกจากนี้ฉันต้องการชี้ให้เห็นว่า~/.ssh/id_rsaเป็นคีย์เริ่มต้นดังนั้นคุณไม่ควรระบุssh-add ~/.ssh/id_rsaเพียงssh-addควรใช้งานได้

ฉันลองวิธีแก้ปัญหาของคุณในสภาพแวดล้อมเดียวกันนี้ @Cupcake มันไม่ทำงาน ฉันไม่เข้าใจว่าทำไมถึงเป็นคำตอบเช่นกัน แต่ถ้าฉันทำอย่างนี้มันก็ไม่เคยทำงาน
nighliber

3

หากคุณใช้ Putty คุณอาจต้องตั้งค่าตัวเลือก "การเชื่อมต่อ / SSH / Auth / อนุญาตให้ตัวแทนส่งต่อ" เป็น "จริง"

ป้อนคำอธิบายรูปภาพที่นี่


3

นี้ทำงานสำหรับฉัน

ในหน้าต่าง CMD พิมพ์คำสั่งต่อไปนี้:

cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add path/to/.ssh/id_rsa

3

สำหรับทุบตีใน Windows 10 ฉันเพิ่มนี้ใน. bash_profile:

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi

1
ฉันไม่รู้ว่าทำไมคุณถึงวางข้อความมากขนาดนี้ถ้าคุณบอกให้โทร$(ssh-agent -s)มาตั้งสภาพแวดล้อมของตัวแทน
erikbwork

1
สิ่งนี้ใช้ได้กับฉันเมื่อฉันใช้ครั้งแรก แต่หลังจากรีบูตระบบมันทำให้ปัญหาแย่ลง ด้วย ssh ไม่ทำงานเลยอีกต่อไป ไม่แนะนำ.
yspreen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.