Không thể mở kết nối đến đại lý xác thực của bạn


1605

Tôi đang gặp phải lỗi này:

$ 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.

Tôi đã cố gắng thêm các khóa và tôi nhận được lỗi này dưới đây:

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

26
Câu hỏi: một khi bạn đã trải qua MỌI câu trả lời trên trang này và không ai trong số họ làm việc. Bạn có thể làm gì tiếp theo?
Brandon Bertelsen

8
@BrandonBertelsen Hãy thử cái này: $ ssh-agent /bin/sh$ ssh-add $yourkey
shyam

@BrandonBertelsen Tiếp theo, bạn nên sử dụng git config --listđể xem nếu bạn đã đặt credential.helper- nếu bạn có, bạn nên xóa cài đặt này, vì người trợ giúp đang không có ích.
yoyo

Câu trả lời:


2382

Bạn đã bắt đầu ssh-agent?

Bạn có thể cần phải bắt đầu ssh-agenttrước khi chạy ssh-addlệnh:

eval `ssh-agent -s`
ssh-add

Lưu ý rằng điều này sẽ bắt đầu tác nhân cho msysgit Bash trên Windows . Nếu bạn đang sử dụng hệ vỏ hoặc hệ điều hành khác, bạn có thể cần sử dụng một biến thể của lệnh, chẳng hạn như các biến thể được liệt kê trong các câu trả lời khác .

Xem các câu trả lời sau:

  1. ssh-add phàn nàn: Không thể mở kết nối đến tác nhân xác thực của bạn
  2. Git đẩy yêu cầu tên người dùng và mật khẩu (chứa hướng dẫn chi tiết về cách sử dụng ssh-agent)
  3. Làm thế nào để chạy tác nhân xác thực (git / ssh)? .
  4. Không thể mở kết nối đến đại lý xác thực của bạn

Để tự động khởi động ssh-agent và cho phép một cá thể hoạt động trong nhiều cửa sổ giao diện điều khiển, hãy xem Bắt đầu ssh-agent khi đăng nhập .

Tại sao chúng ta cần sử dụng evalthay vì chỉ ssh-agent?

Để tìm hiểu lý do tại sao, hãy xem câu trả lời của Robin Green .

Khóa công khai và khóa riêng

Ngoài ra, bất cứ khi nào tôi sử dụng ssh-add, tôi luôn thêm khóa riêng cho nó. Các tập tin ~/.ssh/id_rsa.pubtrông giống như một khóa công khai, tôi không chắc nếu nó sẽ làm việc. Bạn có một ~/.ssh/id_rsatập tin? Nếu bạn mở nó trong một trình soạn thảo văn bản, nó có nói đó là khóa riêng không?


18
@xtian Tôi không chắc là tôi hiểu vấn đề. Tôi không biết chi tiết chính xác, nhưng tôi đoán rằng khóa riêng không bao giờ được gửi qua mạng. Tôi nghĩ rằng ssh-addchỉ đơn giản là giải mã một khóa riêng được mã hóa trên máy chủ, để nó có thể được sử dụng cục bộ ... nó không bao giờ được gửi cho bất cứ ai . Tôi đoán rằng chỉ có các khóa công khai được gửi qua mạng. Là sự hiểu biết của tôi không chính xác?

6
Bạn thật tốt bụng Cupcake. Bạn hoàn toàn đúng. Lỗi của tôi. ví dụ ở đây ; ssh-add thêm khóa riêng cho tác nhân ssh-agent (quá trình đang chạy) của người dùng có thể hành động thay mặt khách hàng / máy chủ lưu trữ với máy chủ chấp nhận khóa rsa-anything. Trời ạ. Tôi không biết điều gì làm tôi rất phấn khích.
xtian

22
Tôi tò mò tại sao eval ssh-agent -shoạt động, nhưng ssh-agenttrên chính nó không.
DanielM

13
@DanielM: SSH cần hai điều để sử dụng ssh-agent: một cá thể ssh-agent đang chạy trong nền và một bộ biến môi trường cho SSH biết nên sử dụng socket nào để kết nối với tác nhân ( SSH_AUTH_SOCKIIRC). Nếu bạn chỉ chạy ssh-agentthì tác nhân sẽ bắt đầu, nhưng SSH sẽ không biết tìm nó ở đâu.
Vanessa Phipps

4
Cảm ơn đã trả lời mặc dù. Tôi chỉ nhận thấy rằng bạn đã sử dụng backquote trong lệnh. Tôi rất bối rối tại sao backquote (`) hoạt động cho lệnh eval nhưng không trích dẫn đơn / đôi (',") trên vỏ bash của tôi?
Weishi Zeng

540

Tôi đã thử các giải pháp khác nhưng không có kết quả. Tôi đã thực hiện nhiều nghiên cứu hơn và thấy rằng lệnh sau đã hoạt động. Tôi đang sử dụng Windows 7 và Git Bash .

eval $(ssh-agent)

Thêm thông tin trong: https://coderwall.com/p/rdi_wq


14
Làm việc trên Windows 8 cũng vậy.
Andreas Rudolph

Tôi cũng đang sử dụng Windows 7 và Git Bash, và câu trả lời của tôi chỉ hoạt động tốt. Thật tuyệt khi bạn cũng có thể làm theo cách này.

2
Tuyệt quá !! Làm việc với windows 10 cũng được.
NitinM

1
Đã làm việc trên Manjaro
code_flow 23/12/19

1
$ eval "$ (ssh-agent -s)" đã làm việc cho tôi trên Windows 10
Andrew Anderson

261

Lệnh sau làm việc cho tôi. Tôi đang sử dụng CentOS.

exec ssh-agent bash

3
Cảm ơn, điều này làm việc cho tôi, tôi đã chạy 'exec ssh-agent zsh' cho shell của mình.
jasonmcclurg

2
Theo "câu trả lời" đã bị xóa này , nó cũng hoạt động trên Amazon Linux AMI. Tôi đoán đó là một giải pháp Unix / Linux / * nix.

4
Tôi đã đưa vào một container docker và ssh-add my.id_rsasẽ thất bại với tôi. Nhưng exec ssh-agent zshđã cho một môi trường mà tôi có thể ssh-addkhông có vấn đề. Và tôi đang ở trong container
docker

Bất cứ ai có thể xin vui lòng giải thích ngắn gọn những gì vấn đề có thể đã được? Cảm ơn :) Điều này cũng hoạt động trên Ubuntu 14.04 của tôi.
harkirat1892

cũng đã làm việc trên raspbian
mega_creamery

215

MsysGit hoặc Cygwin

Nếu bạn đang sử dụng Msysgit hoặc Cygwin, bạn có thể tìm thấy một hướng dẫn tốt tại SSH-Agent trong msysgit và cygwin và bash :

  1. Thêm một tập tin được gọi .bashrcvào thư mục nhà của bạn.

  2. Mở tệp và dán vào:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. Điều này giả định rằng chìa khóa của bạn nằm ở ~/.ssh/id_rsavị trí thông thường . Nếu không, bao gồm một đường dẫn đầy đủ sau ssh-addlệnh.

  4. Thêm vào hoặc tạo tập tin ~/.ssh/configvới nội dung

    ForwardAgent yes
    

    Trong hướng dẫn ban đầu, ForwardAgentparam là Yes, nhưng nó là một lỗi đánh máy. Sử dụng tất cả chữ thường hoặc bạn sẽ gặp lỗi.

  5. Khởi động lại Msysgit. Nó sẽ yêu cầu bạn nhập cụm mật khẩu của bạn một lần và đó là (cho đến khi bạn kết thúc phiên, hoặc tác nhân ssh của bạn bị giết.)

Mac / OS X

Nếu bạn không muốn bắt đầu một ssh-agent mới mỗi khi bạn mở terminal, hãy xem Keychain . Bây giờ tôi đang sử dụng máy Mac, vì vậy tôi đã sử dụng ssh-agent hướng dẫn với zsh & móc khóa trên Mac OS X để thiết lập nó, nhưng tôi chắc chắn rằng một tìm kiếm Google sẽ có nhiều thông tin cho Windows.

Cập nhật : Một giải pháp tốt hơn trên Mac là thêm khóa của bạn vào Mac OS Keychain:

ssh-add -K ~/.ssh/id_rsa

Đơn giản như thế.


1
FYI: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

1
Khi tôi làm eval `ssh-agent -s`quá trình không dừng lại khi tôi thoát khỏi Cygwin.
Kiril

Có cách nào để thiết lập cấu hình cho Windows / gitbash để bạn không phải làm điều đó mỗi lần không?
mix3d

4
Nó nên là ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)- nếu không thì một ssh-agent mới được bắt đầu mọi lúc. Giết máy của tôi mọi lúc và sau đó khi người dùng có cronjobs.
băm nhỏ

3
ForwardAgent yeskhông cần thiết và là một rủi ro bảo mật hàng tháng nếu nó được đặt cho bất kỳ máy chủ không tin cậy nào. Quyền truy cập cục bộ vào tác nhân chính của bạn sẽ hoạt động bất kể cài đặt này.
Hiếm khi

208

Không thể mở kết nối đến đại lý xác thực của bạn

Để khắc phục lỗi này:

bash:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Sau đó sử dụng ssh-addnhư bình thường.


Mẹo hay:

Tôi đã luôn quên những gì cần gõ cho các lệnh ssh-agent ở trên, vì vậy tôi đã tạo một bí danh trong .bashrctệp của mình như thế này:

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

Bây giờ thay vì sử dụng ssh-agent, tôi có thể sử dụngssh-agent-cyg

Ví dụ

$ 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

Nguồn gốc của bản sửa lỗi:

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


3
bạn sẽ cần chạy evallệnh mỗi lần bạn chạy trước đó ssh-agent. Tôi sử dụng một bí danh bây giờ, xem câu trả lời cập nhật cho cách tôi làm điều này.
Chris Snow

1
FYI: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

Tôi cũng cần sử dụng đặc tả ssh thay vì https (xem help.github.com/articles/changing-a-remote-s-url )
RunHolt

1
Thưa ngài, bạn thật tuyệt vời. Cảm ơn. ** Tôi gặp phải vấn đề tương tự trong khi nhân bản repo bitbucket, tôi đã thiết lập khóa ssh, nhưng vẫn bị lỗi : fatal: Could not read from remote repository..
Nishant Ghodke

Làm việc cho tôi trên windows 10 và git bash được cài đặt
desmond13

116

Tôi đã đối mặt với cùng một vấn đề với Linux và đây là những gì tôi đã làm:

Về cơ bản, lệnh ssh-agent khởi động tác nhân, nhưng nó không thực sự đặt các biến môi trường cho nó chạy. Nó chỉ xuất các biến đó sang shell.

Bạn cần phải:

eval `ssh-agent`

và sau đó làm ssh-add. Xem Không thể mở kết nối đến đại lý xác thực của bạn .


1
FYI: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

Làm việc cho tôi quá trong khi gặp vấn đề khi sử dụng boot2docker trên Windows.
Veve

Đây là những gì nó đã cho tôi.
Tom

115

ssh-add và ssh (giả sử bạn đang sử dụng các cài đặt openssh) yêu cầu một biến môi trường để biết cách nói chuyện với tác nhân ssh. Nếu bạn đã khởi động tác nhân trong một cửa sổ nhắc lệnh khác với cửa sổ bạn đang sử dụng hoặc nếu bạn khởi động nó không chính xác, thì ssh-add hay ssh sẽ không thấy biến môi trường đó được đặt (vì biến môi trường được đặt cục bộ thành lệnh nhắc nó được đặt trong).

Bạn không nói phiên bản ssh nào bạn đang sử dụng, nhưng nếu bạn đang sử dụng cygwin, bạn có thể sử dụng công thức này từ SSH Agent trên 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

Điều này sẽ tự động khởi động một tác nhân cho mỗi cửa sổ nhắc lệnh mới mà bạn mở (là tối ưu nếu bạn mở nhiều lời nhắc lệnh trong một phiên, nhưng ít nhất nó sẽ hoạt động).


1
FYI: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

9
Tôi đã được liên kết ở đây từ một câu hỏi SO khác. Tôi có thể hỏi tại sao cần phải thêm tệp này vào tệp cấu hình Bash không? Trên máy của tôi, tất cả những gì tôi cần làm là chạy eval $(ssh-agent)và tôi có thể sử dụng ssh không mật khẩu cho mỗi cửa sổ terminal mới.
Andy J

Điều đó là không thể, trừ khi bạn khởi chạy các thiết bị đầu cuối mới từ thiết bị đầu cuối đó.
Robin Green

114

Chạy

ssh-agent bash
ssh-add

Để biết thêm chi tiết, bạn có thể tìm kiếm

ssh-agent

hoặc chạy

man ssh-agent

7
Tôi muốn giới thiệu rằng nếu bạn đang làm việc với git bash trên windows thì hãy thử điều này.
Neeraj Sewani

@ neer17 điều này cho phép tôi sử dụng ssh-copy-idtrên Ubuntu. Không chắc chắn tại sao tôi không thể thêm khóa mà không sử dụng ssh-agentđể khởi chạy bash.
Một sốGuyOnAComputer

2
Đây là một trong những cho Windows! (đã thử nghiệm trên W10pro build 1809 và git 2.21.0)
Alfabravo

Tôi đang sử dụng ZSH và điều này hiệu quả với tôi:ssh-agent zsh; ssh-add
sirboderafael

97

Hãy thử các bước sau:

1) Mở Git Bash và chạy: cd ~/.ssh

2) Cố gắng chạy đại lý: eval $(ssh-agent)

3) Ngay bây giờ, bạn có thể chạy lệnh sau: ssh-add -l


9
Đây là giải pháp duy nhất ở đây phù hợp với tôi (trên windows 7). Đầu tiên tôi sử dụng lệnh ps aux | grep sshkilllệnh trong câu trả lời của Rick để giết các đặc vụ. Sau đó, ssh-addcông việc không có công tắc -l (Sử dụng -l đã báo lỗi). eval 'ssh-agent'như trong câu trả lời của Rick không hoạt động, tôi phải sử dụng eval $(ssh-agent)như trong câu trả lời của Chechoro ở đây.
Frug

6
+1 Tôi gặp vấn đề chính xác giống như OP (Windows 7) và đây là giải pháp duy nhất phù hợp với tôi.
Weblurk

1
FYI: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

2
@Frug Đó là backticks, không phải dấu nháy đơn; trong shell script có nghĩa là thực thi những gì chứa bên trong. $(ssh-agent)tương đương `ssh-agent`nhưng dễ đọc hơn.
MM

96

Thay vì sử dụng $ ssh-agent -s, tôi đã sử dụng $ eval `ssh-agent -s`để giải quyết vấn đề này.

Đây là những gì tôi đã thực hiện từng bước (bước 2 trở đi trên GitBash):

  1. Dọn dẹp thư mục .ssh của tôi tại C:\user\<username>\.ssh\
  2. Tạo khóa SSH mới
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. Kiểm tra nếu bất kỳ id quá trình (ssh agent) đã chạy.
    $ ps aux | grep ssh
  4. (Tùy chọn) Nếu tìm thấy bất kỳ trong bước 3, hãy giết những người đó
    $ kill <pids>
  5. Bắt đầu đại lý ssh
    $ eval `ssh-agent -s`
  6. Đã thêm khóa ssh được tạo ở bước 2 vào tác nhân ssh
    $ ssh-add ~/.ssh/id_rsa

3
'eval' không được công nhận là lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó.
Chutipong Roobklom

Bạn chỉ có thể khởi động lại tác nhân bằng eval ssh-agent -svà thêm khóa cũ bằng ssh-add ~ / .ssh / id_rsa. Nếu bạn tạo khóa SSH mới thì bạn sẽ cần cập nhật khóa đó trong tất cả các dịch vụ của mình như github, bitbucket, v.v.
Mohit Satish Pawar

Có cách nào để Windows này sống sót khởi động lại không? Sau khi khởi động lại, nó không hoạt động cho đến khi tôi khởi chạy lại "eval ssh-agent -s" và "ssh-add ~ / .ssh / id_rsa".
Michal Vician

1
Sau khi tìm kiếm trong một thời gian dài, đây là giải pháp hiệu quả
Sujit.Warrier

Giải thích tuyệt vời!
avivamg

56

Trong Windows 10 tôi đã thử tất cả các câu trả lời được liệt kê ở đây nhưng dường như không có câu trả lời nào hoạt động. Trong thực tế, họ đưa ra một đầu mối. Để giải quyết vấn đề đơn giản là bạn cần 3 lệnh. Ý tưởng của vấn đề này là ssh-add cần các biến môi trường SSH_AUTH_SOCK và SSH_AGENT_PID được đặt với đường dẫn tệp sock-agent sock hiện tại và số pid.

ssh-agent -s > temp.txt

Điều này sẽ lưu đầu ra của ssh-agent trong tập tin. Nội dung tệp văn bản sẽ giống như thế này:

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

Sao chép một cái gì đó như "/tmp/ssh-kjmxRb2764/agent.2764" từ tệp văn bản và chạy lệnh sau trực tiếp trong bảng điều khiển:

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

Sao chép một cái gì đó như "3044" từ tệp văn bản và chạy lệnh sau trực tiếp trong bảng điều khiển:

set SSH_AGENT_PID=3044

Bây giờ khi các biến môi trường (SSH_AUTH_SOCK và SSH_AGENT_PID) được đặt cho phiên bảng điều khiển hiện tại chạy lệnh ssh-add của bạn và nó sẽ không thất bại khi kết nối tác nhân ssh.


2
Cảm ơn bạn! Đây chính xác là những gì tôi cần.
bộ

6
Không, vẫn vậy.
Jaskey

3
Các bước này giống như thực hiện 'eval $ (ssh-agent)'
K.Nicholas

2
Đã sửa lỗi trên Windows 10 của tôi! Cảm ơn bạn!
ntl

1
Điều này thực sự đã giúp tôi cứu vấn đề trên Linux ... chỉ cần thay thế setbằngexport
greg hor

30

Một điều tôi đã gặp là điều đó evalkhông hiệu quả với tôi khi sử dụng Cygwin, điều làm việc cho tôi là ssh-agent ssh-add id_rsa.

Sau đó, tôi đã gặp một vấn đề là khóa riêng của tôi quá mở, giải pháp tôi tìm được cho việc đó (từ đây ):

chgrp Users id_rsa

cũng như

chmod 600 id_rsa

cuối cùng tôi đã có thể sử dụng:

ssh-agent ssh-add id_rsa

Bạn đã sử dụng eval `ssh-agent`, với các backticks `xung quanh ssh-agent, như thể hiện trong câu trả lời của tôi ? Điều đó làm việc tốt cho tôi ở Cygwin. Bạn có vẻ đúng mà ssh-agent ssh-addcũng hoạt động, ít nhất là trong Bashysgit Bash. Tuy nhiên, lưu ý rằng đó id_rsalà khóa mặc định được sử dụng, vì vậy bạn không cần chỉ định nó với ssh-agent ssh-add id_rsa.

Tôi tin rằng tôi đã sử dụng backticks, nhưng đối với tôi vẫn không có xúc xắc
Vnge

1
OMG BẠN ĐÃ GIẢI QUYẾT GIỜ CỦA TÔI GIỜ. Cảm ơn!
Chee Loong Sớm

Câu trả lời này đã làm việc cho tôi trong bash.
Lsakurifaisu

27

Để khuếch đại câu trả lời của n3o cho Windows 7 ...

Vấn đề của tôi thực sự là một số biến môi trường bắt buộc không được đặt và n3o đúng là ssh-agent cho bạn biết cách đặt các biến môi trường đó, nhưng thực tế không đặt chúng.

Vì Windows không cho phép bạn thực hiện "eval", đây là những việc cần làm thay thế:

Chuyển hướng đầu ra của ssh-agent sang một tệp bó với

ssh-agent > temp.bat

Bây giờ sử dụng trình soạn thảo văn bản như Notepad để chỉnh sửa temp.bat. Đối với mỗi trong hai dòng đầu tiên: - Chèn từ "set" và khoảng trắng ở đầu dòng. - Xóa dấu chấm phẩy đầu tiên và mọi thứ tiếp theo.

Bây giờ xóa dòng thứ ba. Temp.bat của bạn sẽ trông giống như thế này:

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

Chạy temp.bat. Điều này sẽ đặt các biến môi trường cần thiết cho ssh-add để hoạt động.


FYI: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

Tôi vẫn nhận được Could not open a connection to your authentication agent.khi chạy ssh-add trong Win10 PowerShell.
Kebman

19

Tôi vừa mới làm việc này. Mở của bạn~/.ssh/config tập tin .

Nối các mục sau-

Host github.com
 IdentityFile ~/.ssh/github_rsa

Trang đã cho tôi gợi ý Thiết lập SSH cho Git nói rằng việc thụt không gian duy nhất rất quan trọng ... mặc dù tôi có một cấu hình ở đây từ Heroku không có không gian đó và hoạt động bình thường.


1
Điều này không giúp ích gì với việc nhập cụm mật khẩu cho khóa SSH.
alesch

1
Nếu bạn không muốn nhập cụm mật khẩu, hãy tạo một khóa không có. Sẽ không có lý do gì để có cụm mật khẩu nếu bạn chỉ lưu trữ nó trong tập lệnh của mình.
Paul Becotte

Đó là toàn bộ quan điểm của việc sử dụng ssh-agent. Mật khẩu cho các khóa của bạn được lưu trữ trong một móc khóa an toàn, được xử lý bởi ssh-agent.
alesch

Đây là câu trả lời tốt nhất cho tôi ở đây. Có rất nhiều vấn đề với ssh-agent bắt đầu hàng ngàn lần trong Windows 7 và cái bẫy tiêu diệt đó đã không thực hiện được. Tôi không phiền khi không có cụm mật khẩu trên máy tính cá nhân ở nhà.
F Meatgrinder

18

Nếu bạn làm theo các hướng dẫn này, vấn đề của bạn sẽ được giải quyết.

Nếu bạn đang sử dụng máy Mac hoặc Linux, hãy nhập:

eval "$(ssh-agent -s)"

Nếu bạn đang sử dụng máy Windows, hãy nhập:

ssh-agent -s

13

Hãy để tôi cung cấp một giải pháp khác. Nếu bạn vừa cài đặt Git 1.8.2.2 hoặc ở đâu đó và bạn muốn bật SSH, hãy làm theo các hướng dẫn được viết tốt .

Tất cả mọi thứ cho đến Bước 5.6, nơi bạn có thể gặp phải một chút khó khăn. Nếu một tác nhân SSH đã chạy, bạn có thể nhận được thông báo lỗi sau khi bạn khởi động lại bash

Could not open a connection to your authentication agent

Nếu bạn làm như vậy, hãy sử dụng lệnh sau để xem có nhiều hơn một quy trình tác nhân ssh đang chạy không

ps aux | grep ssh

Nếu bạn thấy nhiều hơn một dịch vụ đại lý ssh, bạn sẽ cần phải giết tất cả các quy trình này. Sử dụng lệnh kill như sau (PID sẽ là duy nhất trên máy tính của bạn)

kill <PID>

Thí dụ:

kill 1074

Sau khi bạn đã loại bỏ tất cả các quy trình ssh-agent, hãy chạy px aux | Lệnh grep ssh một lần nữa để chắc chắn rằng chúng đã biến mất, sau đó khởi động lại Bash.

Voila, bây giờ bạn sẽ nhận được một cái gì đó như thế này:

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

Bây giờ bạn có thể tiếp tục Bước 5 và hơn thế nữa.


giúp tôi vượt qua rào cản, tyvm
Jason Fingerar

Chỉ muốn thêm rằng trong trường hợp của tôi, một trong những mục được liệt kê là quy trình grep mà chúng tôi đang thực hiện tìm kiếm, nhưng nó đã bị giết sau khi thực hiện. Không có ý định chơi chữ.
Ryan Mortensen

FYI: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

13

Đối với người dùng cửa sổ, tôi thấy cmd eval `ssh-agent -s`không hoạt động, nhưng sử dụng git bash đã có tác dụng eval `ssh-agent -s`; ssh-add KEY_LOCATIONvà đảm bảo dịch vụ windows "OpenSSH Key Management" không bị tắt


12

Lưu ý: đây là câu trả lời cho câu hỏi này , đã được hợp nhất với câu hỏi này. Câu hỏi đó là dành cho Windows 7, nghĩa là câu trả lời của tôi là dành cho Cygwin / MSYS / MSYS2. Cái này có vẻ như đối với một số unix, nơi tôi không mong đợi tác nhân SSH cần được quản lý như thế này .

Điều này sẽ chạy tác nhân SSH và chỉ xác thực lần đầu tiên bạn cần , không phải mỗi lần bạn mở thiết bị đầu cuối Bash. Nó có thể được sử dụng cho bất kỳ chương trình nào sử dụng SSH nói chung, bao gồm cả ssh và scp. Chỉ cần thêm nó vào /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: được hợp nhất từ stackoverflow.com/questions/4083079/
săn

2
Quá trình ssh-agent dường như không được liên kết với cùng một thiết bị đầu cuối được sử dụng để chạy nó. Tôi đoán ps -A | grep ssh-agenthoặc ps h -C ssh-agentnên được sử dụng thay vìps | grep ssh-agent
alexis

1
Sử dụng dấu gạch nối trong tên hàm có thể không được khuyến nghị. Tôi không biết tại sao, nhưng đọc . Ví dụ, tôi thấy rằng echo ssh-auth | bashsẽ thất bại.
alexis

1
Bạn có thể chỉ đơn giản là điều này nhiều hơn một chút. Chỉ cần kiểm tra xem nó đang chạy và gán các biến env. Và sau đó thêm AddKeysToAgent yes(hoặc sử dụng prompt) vào mục nhập cấu hình ssh của bạn (sử dụng Host *cho tất cả Máy chủ.) Bằng cách đó, bạn sẽ chỉ được yêu cầu nhập mật khẩu SSH nếu bạn thực sự cố gắng kết nối nếu không bạn có thể được yêu cầu nhập mật khẩu đơn giản git diffhoặc git status.
ST-DDT

2
$HOME/.sshcó thể mạnh hơn/home/$(whoami)/.ssh
Ari Sweedler

12

Tôi đã có cùng một vấn đề Ubuntuvà các giải pháp khác đã không giúp tôi. Cuối cùng tôi đã nhận ra vấn đề của mình là gì. Tôi đã tạo sshcác khóa của mình trong /root/.sshthư mục, vì vậy ngay cả khi tôi chạy ssh-addbằng root, nó vẫn không thể thực hiện được và tiếp tục nói

Could not open a connection to your authentication agent.

Tôi đã tạo khóa công khai và khóa riêng của mình trong /home/myUsername/thư mục và tôi đã sử dụng

ssh-agent /bin/sh

sau đó tôi chạy

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

và vấn đề đã được giải quyết theo cách này.

Lưu ý: Để truy cập kho lưu trữ của bạn, hãy gitthêm mật khẩu git của bạn khi bạn đang tạo sshkhóa ssh-keygen -t rsa -C "your git email here".


9

Sử dụng tham số -A khi bạn kết nối với máy chủ, ví dụ:

ssh -A root@myhost

từ trang người đàn ông:

-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.

Nó làm gì và tại sao?
erikbwork

theo trang man ... man ssh ... -A Cho phép chuyển tiếp kết nối tác nhân xác thực. Điều này cũng có thể được chỉ định trên cơ sở mỗi máy chủ lưu trữ trong tệp cấu hình.
Scott Stensland

8

Các giải pháp cơ bản để chạy ssh-agentđược trả lời trong nhiều câu trả lời. Tuy nhiên, chạy ssh-agentnhiều lần (mỗi thiết bị đầu cuối đã mở hoặc mỗi lần đăng nhập từ xa) sẽ tạo ra nhiều bản sao ssh-agentđang chạy trong bộ nhớ. Các tập lệnh được đề xuất để tránh vấn đề đó dài và cần phải viết và / hoặc sao chép tệp bị tách hoặc cần ghi quá nhiều chuỗi trong ~/.profilehoặc ~/.schrc. Hãy để tôi đề nghị giải pháp hai chuỗi đơn giản:

Đối với sh , bash , vv

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

Đối với csh , tcsh , v.v .:

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

Cái gì đây:

  • tìm kiếm quá trình ssh-agenttheo tên và theo người dùng hiện tại
  • tạo tập tin shell shell thích hợp bằng cách gọi ssh-agentssh-agenttự chạy nếu không ssh-agenttìm thấy quy trình người dùng hiện tại
  • đánh giá kịch bản shell được tạo để cấu hình môi trường phù hợp

Không cần thiết phải bảo vệ tập lệnh shell được tạo ~/.ssh-agent.tcshhoặc ~/.ssh-agent.shtừ người dùng khác truy cập vì: giao tiếp đầu tiên ssh-agentđược xử lý thông qua ổ cắm được bảo vệ mà người dùng khác không thể truy cập và người dùng khác có thể tìm thấy ssh-agentổ cắm đơn giản bằng cách liệt kê các tệp trong /tmp/thư mục. Theo như truy cập để ssh-agentxử lý nó là những điều tương tự.


6

Hãy thử như sau:

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

1
Trông giống như một cách sạch sẽ để làm điều này.
Leon Grapenthin

6

Đọc câu trả lời của @ cupcake để giải thích. Ở đây tôi chỉ cố gắng tự động hóa sửa chữa.

Nếu bạn sử dụng thiết bị đầu cuối Cygwin với BASH, hãy thêm phần sau vào tệp $ HOME / .bashrc. Điều này chỉ khởi động ssh-agent một lần trong thiết bị đầu cuối Bash đầu tiên và thêm các khóa vào ssh-agent. (Không chắc chắn nếu điều này là bắt buộc trên 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

KHÔNG GIỚI THIỆU để thêm các khóa chính xác của bạn trong lệnh "ssh-add".


5

Tôi gặp vấn đề này, khi tôi bắt đầu ssh-agent, khi nó đã chạy. Bị bối rối. Để xem nếu đây là trường hợp, sử dụng

eval $(ssh-agent)

để xem nếu điều này giống như những gì bạn nghĩ nó nên được. Trong trường hợp của tôi, nó khác với cái tôi mới bắt đầu.

Để xác minh thêm nếu bạn có nhiều hơn một ssh-agent đang chạy, bạn có thể xem lại:

ps -ef | grep ssh

2
Tôi nghĩ rằng việc chạy eval $(ssh-agent)được cho là tạo ra một tác nhân mới với một bộ vi xử lý khác nhau mỗi lần, mặc dù tôi có thể sai.

4

Tôi đã gặp một vấn đề tương tự khi tôi đang cố gắng để nó hoạt động trên Windows để kết nối với stash qua ssh

Đây là giải pháp hiệu quả với tôi.

  1. Hóa ra tôi đang chạy tác nhân Pagsh ssh trên hộp Windows của mình - Tôi sẽ kiểm tra xem bạn đang chạy gì. Tôi nghi ngờ đó là Pagete vì nó được mặc định với Putty và winScp

  2. Ssh-add không hoạt động từ dòng lệnh với loại tác nhân này

  3. Bạn cần thêm khóa riêng thông qua cửa sổ UI cuộc thi mà bạn có thể nhận được bằng cách nhân đôi biểu tượng Pagete trên thanh tác vụ (một khi nó được bắt đầu).

  4. Trước khi bạn thêm khóa vào Cuộc thi, bạn cần chuyển đổi nó sang định dạng PPK. Hướng dẫn đầy đủ có sẵn ở đây Cách chuyển đổi khóa SSH sang định dạng ppk

  5. Thế là xong. Khi tôi đã tải lên khóa của mình để lưu trữ, tôi có thể sử dụng SourceTree để tạo một repo cục bộ và sao chép điều khiển từ xa.

Hi vọng điêu nay co ich...


3

Tôi đã khắc phục lỗi bằng cách dừng (giết) các quá trình git (tác nhân ssh), sau đó gỡ cài đặt Git và sau đó cài đặt lại Git.


2
Tôi nghi ngờ rằng tất cả những gì bạn cần làm chỉ là giết bất kỳ quy trình đại lý hiện có nào, sau đó khởi động lại một quy trình, thay vì phải cài đặt lại Git.

3

Sử dụng Git Bash trên Win8.1E, độ phân giải của tôi như sau:

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

Tại sao cần phải xuất ra /dev/null? Câu trả lời của bạn về cơ bản làm điều tương tự như điều này .

Ngoài ra, tôi muốn chỉ ra đó ~/.ssh/id_rsalà khóa mặc định, vì vậy bạn không cần phải chỉ định ssh-add ~/.ssh/id_rsa, chỉ ssh-addnên hoạt động.

Tôi đã thử giải pháp của bạn trong cùng môi trường này @Cupdding, nó không hoạt động. Tôi cũng không hiểu tại sao đây là câu trả lời, nhưng trừ khi tôi làm theo cách này thì nó không bao giờ hoạt động.
đêm

3

Nếu bạn đang sử dụng Putty, có lẽ bạn cần đặt tùy chọn "Kết nối / SSH / Auth / Cho phép chuyển tiếp đại lý" thành "true".

nhập mô tả hình ảnh ở đây


3

Điều này làm việc cho tôi.

Trong cửa sổ CMD, gõ lệnh sau:

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

Đối với bash được tích hợp trong Windows 10, tôi đã thêm phần này vào .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
Tôi không biết tại sao bạn dán quá nhiều văn bản nếu bạn có thể vừa gọi $(ssh-agent -s)để đặt môi trường của đại lý.
erikbwork

1
Điều này làm việc cho tôi khi tôi sử dụng nó lần đầu tiên. Nhưng sau khi khởi động lại hệ thống, nó thực sự khiến vấn đề trở nên tồi tệ hơn. Với ssh không làm việc ở tất cả nữa. Không được khuyến khích.
yspreen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.