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


151

Tôi đã cố gắng để ssh-addlàm việc trên RaspberryPi chạy Raspbian.

Tôi có thể bắt đầu ssh-agent, khi tôi làm điều đó sẽ cho đầu ra sau vào thiết bị đầu cuối:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

Nếu tôi chạy ps aux | grep sshtôi có thể thấy nó đang chạy.

Sau đó, tôi cố gắng chạy ssh-addđể thêm cụm mật khẩu chính của mình và tôi nhận được như sau:

Could not open a connection to your authentication agent.

Có ý kiến ​​gì không?


6
Hãy thửeval $(ssh-agent)
Ulrich Dangel

Câu trả lời:


224

Shell của bạn có nghĩa là để đánh giá đầu ra mã shell bằng ssh-agent. Chạy cái này thay thế:

eval "$(ssh-agent)"

Hoặc nếu bạn đã bắt đầu sử dụng ssh-agent, hãy sao chép và dán nó vào dấu nhắc shell của bạn (giả sử bạn đang chạy shell giống Bourne).

sshcác lệnh cần biết làm thế nào để nói chuyện với ssh-agent, họ biết rằng từ SSH_AUTH_SOCKbiến môi trường.


Cảm ơn, tôi không hiểu nó hoạt động như thế nào. Đó là rất nhiều đánh giá cao.
Daniel Groves

2
Hoặc bạn có thể nhập bash ssh-agent và sau khi ssh-add sẽ hoạt động
RaduM

@Stephane, tôi có hiểu chính xác rằng lệnh ssh-agent chỉ in ra kết quả thực thi của nó trong khi phiên bản eval thực sự chạy lệnh không?
Denys S.

5
@DenysS. À không, nó thực hiện thiết lập và sau đó cho shell của bạn biết cách cập nhật môi trường của nó để có thể liên hệ với nó. Nó không thể tự làm điều đó. Nó có thể khởi động một shell mới với môi trường được cập nhật (đó là những gì ssh-agent bash), nhưng nó không thể cập nhật bộ nhớ của một tiến trình riêng biệt đang chạy một lệnh nước ngoài (shell đã chạy của bạn).
Stéphane Chazelas

@StephaneChazelas, nếu ssh-agent của tôi được khởi động khi khởi động nhưng tôi vẫn phải đánh giá nó trong shell của mình thì có nghĩa là nó không được tự động đánh giá cho mọi shell và phải được cấu hình bằng cách nào đó bởi người dùng root?
chối S.

27

Hãy thử cái này:

$ ssh-agent /bin/sh
$ ssh-add $yourkey

5
Điều này thực sự làm việc cho tôi khi không có câu trả lời nào khác hoạt động.
Joseph Snow

2
Nếu bạn đang sử dụng vỏ cá, câu trả lời này hoạt động. ssh-agent /usr/bin/fish.
slackmart

1
Tôi gặp lỗi: " Không thể mở kết nối đến đại lý xác thực của bạn. "
IgorGanapolsky

@slackmart Nếu bạn đã cài đặt cá trong BSD, vị trí của nó là /usr/local/bin/fish(cách khác /usr/ports/shells/fish). Cảm ơn whereislệnh đã giúp tôi tìm ra điều đó.
cjm

Tuyệt vời @cjm, tôi sử dụng Slackware Linux và đó là con đường phù hợp với tôi.
slackmart

12

Câu hỏi này cũng đã được đề cập rất kỹ trên Stackoverflow .

eval `ssh-agent -s`

ssh-add

Bạn quên các trích dẫn xung quanh `...`. Không có chúng, toán tử split + global được gọi trên đầu ra.
Stéphane Chazelas

6

Nếu sử dụng csh làm shell ( FreeBSD PI ), điều này có thể hoạt động:

eval `ssh-agent -c`

tiếp theo bạn chỉ cần làm một cái gì đó như:

ssh-add ~/.ssh/id_rsa

Tôi gặp lỗi: " Không thể mở kết nối với tác nhân xác thực của bạn. "
IgorGanapolsky

2

Bạn cũng có thể sử dụng cú pháp sau:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'

Điều này không làm việc cho tôi, nếu bạn đi ssh-agent sh -c "ssh-add -l"nó sẽ cho bạn biết bạn không có danh tính.
Ain Tohvri

Bởi vì bạn đã thêm nó trước, ví dụ: ssh-agent sh -c "ssh-add && ssh-add -l"sẽ in danh tính của bạn.
kenorb

1

Hãy thử điều này: đi đến C:\$Installation_Folder$\Git\cmd và thực hiện:

start-ssh-agent 

Nó sẽ mở một lệnh cmd và chạy ssh-agentđúng cách.

ssh-add ~/.ssh/id_rsa Sau đó nên làm việc.


" Bash: start-ssh-agent: không tìm thấy lệnh "
IgorGanapolsky

1

Điều này thật khó hiểu và có 2 câu trả lời tốt, tùy thuộc vào việc người dùng đang cố thêm khóa ssh trên Linux hay trên Windows (như tôi). Điều này có thể không trả lời OP, nhưng là một bản mở rộng cho git-bash. Tôi chạy cả Windows và Ubuntu để phát triển và cài đặt git của tôi hơi khác nhau.

Hãy thử điều này: đi tới C: \ $ Installer_Folder $ \ Git \ cmd và thực hiện:

start-ssh-agent Nó sẽ mở lệnh cmd và chạy ssh-agent đúng cách.

.. là một câu trả lời hay của Windows, nhưng không xác định được rằng bạn dự kiến ​​sẽ đi qua Windows Explorer để tìm thư mục cài đặt Git và chạy Windows shell sẽ mở khi hoàn thành bước 1.
"đi tới C: \ $ Installer_Folder $ \ Git \ cmd "

Bước 2: bạn chỉ cần nhấp đúp

start-ssh-agent

Ở bước 3, bạn quay lại git-bash hoặc trình giả lập thiết bị đầu cuối * nix nào bạn đang chạy và chạy ssh-add. Nếu bạn đã sử dụng tên mặc định cho khóa công khai ssh, bạn không phải thêm tên dưới dạng ssh-add sử dụng tự động.


1

Có một vài cách nếu bạn muốn sử dụng danh tính với sudo, vd sudo npm install.

Đường dài , nhưng cũng cung cấp cho bạn quyền truy cập root, do đó bạn sẽ không cần sử dụng sudonhiều.

  1. Chạy
    sudo ssh-agent bash
    Điều này sẽ yêu cầu mật khẩu của bạn và sau đó sẽ chạy ssh-agentvới các đặc quyền của siêu nhân,
  2. Điều hướng đến thư mục .ssh của người dùng của bạn
    cd /home/user/.ssh
  3. Từ đó bạn có thể chạy

    ssh-add id_rsa
    npm install git+ssh://git@YOUR-PROJECT-URL -g && npm link PROJECT-NAME
    

Đường ngắn , chỉ người dùng của bạn (trừ khi bạn muốn sudo rất nhiều)

eval "$(ssh-agent)"
ssh-add
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install git+ssh://git@PROJECT-URL -g && sudo npm link PROJECT-NAME

exportevalhoạt động cũng như shell đăng nhập của root được cung cấp là Bourne. Nếu vỏ của root là csh hoặc tcsh, hãy sử dụngeval `ssh-agent -c`
Stéphane Chazelas 8/12/2015

Lưu ý rằng bạn cũng có thể cấp rootquyền truy cập cho đại lý ssh của mình bằng cách thực hiệnsudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas

Đã thử cả bash là bourne một lần nữa vỏ và không hoạt động đúng. tất cả người dùng trong trường hợp jessie debian của tôi bao gồm cả root được đặt để sử dụng bash theo mặc định.
Belldandu

Bạn đã thử gì? eval "$(ssh-agent)"tại dấu nhắc của bash shell đang chạy khi root sẽ hoạt động. Rõ ràng bạn sẽ cần phải chạy sshtừ shell đó hoặc hậu duệ của nó để chúng kế thừa SSH_AUTH_SOCK env var. eval "$(sudo ssh-agent)"; sudo ssh...sẽ không hoạt động vì sudotheo mặc định không vượt qua SSH_AUTH_SOCK env var.
Stéphane Chazelas

Tôi đã cố gắng eval "$(ssh-agent)"tìm kiếm sau này để xem nếu có một số lỗi cấu hình. Mặc dù cách hiện tại tôi đã đưa ra hướng dẫn này cho phép kiểm soát miễn phí người dùng mà bạn muốn trở thành vì bạn đã root và có thể truy cập bất kỳ người dùng id_rsa nào trên máy chủ. Vì vậy, một khi tôi nhận được nó làm việc một cách thích hợp, hãy chỉnh sửa câu trả lời của tôi.
Belldandu
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.