Không thể đẩy Heroku vì dấu vân tay quan trọng


131

Tôi chưa quen với Rails và tôi đã cố gắng triển khai một ứng dụng rất đơn giản cho Heroku. Đây là ứng dụng thứ hai mà tôi triển khai và là ứng dụng đầu tiên tôi có thể làm tốt. Tuy nhiên tôi có một số vấn đề với cái này. Bất cứ khi nào tôi " git đẩy heroku master ", tôi đều gặp phải lỗi này:

! Khóa của bạn có dấu vân tay xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx không được phép truy cập> truy cập my_heroku_app.

gây tử vong: Kết thúc từ xa treo lên bất ngờ

Tôi đã cố gắng quản lý các khóa của mình sau khi đăng nhập heroku. Nếu tôi gõ vào bảng điều khiển " phím heroku ", thì tôi nhận được:

Không có chìa khóa cho myemailaddress.

Tuy nhiên, nếu tôi chạy comand " phím heroku: thêm " tôi nhận được

Đã tìm thấy khóa công khai hiện có: /Users/michele/.ssh/id_rsa.pub Tải lên khóa công khai ssh /Users/michele/.ssh/id_rsa.pub! Dấu vân tay đã tồn tại. Vui lòng sử dụng một khóa ssh cho mỗi tài khoản Heroku

Làm ơn giúp tôi! Điều này thật là bực bội, tôi không biết có chuyện gì! Cảm ơn bạn

Câu trả lời:


288

Tôi có cùng một vấn đề, tôi đã theo dõi bài đăng này và những người khác cùng loại mà không thành công: - ((

Cuối cùng, tôi tìm thấy giải pháp: Tôi phải thêm danh tính rsa mới vào máy của mình!

Vì vậy, trước hết tôi đã tạo một khóa rsa mới:

ssh-keygen -t rsa -C "giordano.scalzo[at]gmail.com" -f  ~/.ssh/id_rsa_heroku

sau đó thêm nó vào máy của tôi

ssh-add ~/.ssh/id_rsa_heroku

và cuối cùng, đến Heroku

heroku keys:add ~/.ssh/id_rsa_heroku.pub

Sau đó,

git push heroku master

làm việc như người ở!

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


47
Điều này thực sự gần gũi với tôi. Nhưng có một điều nữa. Tôi đã có hai tài khoản heroku. Người đầu tiên đã thêm khóa SSH mặc định cho máy của tôi. Bất kể tôi đã cố gắng sửa tài khoản thứ hai của mình bằng cách nào, sẽ không mất cho đến khi tôi xóa khóa mặc định khỏi tài khoản đầu tiên. SSH-AGENT sẽ gửi khóa đầu tiên theo mặc định, gây ra sự cố này. Cách khắc phục là tạo các khóa cụ thể cho heroku (không phải mặc định) cho mỗi tài khoản
Tom Carchrae

13
Tôi gặp vấn đề tương tự như @TomCarchrae. Tôi đã đăng xuất khỏi tài khoản dường như bị mất vĩnh viễn heroku logout, đăng nhập vào tài khoản khác và xóa khóa RSA mặc định khỏi tài khoản đó. Sau đó tôi đã có thể ấn với khóa mới được tạo này.
Ross Allen

14
Đối với cá nhân tôi, tôi đã làm tương đương với ssh-add ~/.ssh/id_rsa_herokumặc dù là ssh-add ~/.ssh/identity.heroku.foovì tôi cũng đang sử dụng https://github.com/ddollar/heroku-accounts (một người quản lý nhiều tài khoản cho Heroku).
user664833

1
Một điều khác cần lưu ý - nếu bạn có quá nhiều khóa SSH, nó sẽ không thể đăng nhập vì nó thử các khóa theo thứ tự (và sau đó bạn bị loại khỏi đăng nhập quá nhiều lần thất bại). điều này có vẻ là một lỗ hổng với ssh-agent (dù sao trong ubfox, nhưng tôi cũng cho rằng các triển khai khác). vì vậy, nếu bạn đang nhổ tóc, hãy thử di chuyển thư mục ~ / .ssh của bạn và bắt đầu một thư mục mới (sau đó bạn có thể kéo từng phím một).
Tom Carchrae

7
Bạn có thể ảnh hưởng đến khóa nào được gửi bằng cách thêm mục nhập máy chủ vào ~ / .ssh / config cho heroku.com chỉ vào khóa bạn muốn. Đây là một sửa chữa nhanh chóng cho tôi vì nó đã cố gắng sử dụng khóa mặc định của tôi và không thành công. Điều này có lẽ sẽ không giúp ích trong trường hợp có nhiều tài khoản.
chào

61

Tôi cũng có nhiều khóa và nhiều tài khoản heroku, vì vậy cứ vài tháng tôi lại gặp phải vấn đề này. Như Giordano Scalzo, Tom Carchrae và user664833 đã đề cập, vấn đề chính là ssh-agent, mà bạn điều khiển bằng ssh-addlệnh. Trang man ( man ssh-add) thực sự khá rõ ràng và súc tích, vì vậy hãy kiểm tra nó.

Bạn có thể liệt kê tất cả các khóa mà ssh-agent biết về:

ssh-add -l

Bạn có thể xóa tất cả các khóa mà ssh-agent biết về:

ssh-add -D

Hoặc xóa một khóa cụ thể với

ssh-add -d ~/.ssh/id_rsa_example_key_file_use_your_own

Đừng lo lắng! Bạn không thực sự xóa các khóa, chỉ thay đổi những cái mà ssh-agent tự động cố gắng sử dụng, ví dụ như khi bạn cố gắng đẩy lên heroku. Thật dễ dàng để thêm và xóa các phím khi cần, vì vậy đối với tôi, khi tôi cảm thấy thất vọng vì vấn đề này, cách dễ nhất để khắc phục là xóa tất cả các phím và chỉ thêm lại một phím tôi muốn sử dụng vào lúc này.

ssh-add -D
ssh-add ~/.ssh/id_rsa_example_use_this_one_i_mean_it

1
điều này làm việc tốt với tôi, tuy nhiên, cố gắng thêm lại khóa ssh mặc định của tôi cứ nhắc mật khẩu (trên Mtn Lion), đừng nghĩ tôi có một cái? Đã khởi động lại và trở lại ssh mặc định của tôi tất cả đều ổn - cũng đã tìm thấy stackoverflow.com/questions/7927750/ này hoạt động rất tốt
house9

đập đầu tôi vào tường trong lúc này, và đây là bước cuối cùng cần thiết - cảm ơn!
griswoldbar

Nếu bạn đã thử phương pháp đầu tiên thì phương pháp này, (và đang gặp lỗi Cấp phép từ chối (khóa công khai) khi bạn cố gắng đẩy từ xa Heroku của mình), có lẽ bạn đã quên chạy lại các phím heroku: thêm lệnh. Dù sao, cảm ơn bạn rất nhiều! Điều này đã làm điều đó cho tôi.
Hairgami_Master

38

Máy tính của bạn có khóa SSH, nhưng khóa SSH đó được liên kết với một tài khoản Heroku khác.

Nếu bạn cần sử dụng cả hai tài khoản cho các ứng dụng khác nhau trên cùng một máy tính, bạn nên tạo một khóa SSH mới trên máy của mình và tải nó lên Heroku:

$ ssh-keygen

Đảm bảo lưu nó dưới dạng '/Users/User/.ssh/new_id_rsa.pub' khi lời nhắc hỏi bạn.

$ heroku keys:add /Users/User/.ssh/new_id_rsa.pub 

Sau đó bạn cần thêm một máy chủ thay thế cho heroku.comđến bạn ~/.ssh/config:

Host heroku-alt
HostName heroku.com
IdentityFile ~/.ssh/new_id_rsa

Và sau đó cập nhật .git/configtrong dự án của bạn để sử dụng bí danh máy chủ:

[remote "heroku"]
  url = git@heroku-alt:myapp.git
  fetch = +refs/heads/*:refs/remotes/heroku/*

Bằng cách chọn giữa herokuheroku-alttrong các .git/configtập tin từ xa của các dự án cụ thể, bạn có thể quản lý dự án nào sử dụng thông tin đăng nhập nào.


1
Vâng, đó cũng là vấn đề đối với tôi. Truy cập hai tài khoản Heroku từ cùng một khách hàng. Cảm ơn.
Bernard

Tôi đang cố gắng thực hiện phương pháp này, nhưng "Host heroku-alt" cho tôi biết lỗi : Host heroku-alt not found: 3(NXDOMAIN). Tôi đang đặt cái này trong thiết bị đầu cuối trên Mountain Lion. ~/.ssh/configcũng không tồn tại, chỉ là một loạt các .pubtệp và một tệp được gọi known_hosts. Còn ý tưởng?
JVG

@Jascination Bạn sẽ cần tạo ~ / .ssh / config và đưa vào nội dung được liệt kê trong câu trả lời. Khi bạn đang thực hiện tiết kiệm các tập tin và nó sẽ chứa Host, HostNamevà các IdentityFiledòng. Nó sẽ hoạt động tốt.
Daniel X Moore

3
Thông minh! Kỹ thuật này thật thanh lịch!
kinopyo

Đàn ông! Bạn thật tuyệt vời. Thực hiện từng bước cuối cùng làm tôi nhẹ nhõm. Cảm ơn bạn !!
softvar

14

Đây là một lời giải thích rất rõ ràng mà thiếu từ tài liệu của Heroku hoặc các câu trả lời khác cho câu hỏi. Ít nhất là tất cả các thông tin dường như không xuất hiện ở bất kỳ nơi nào. Nó cũng cho phép bạn hiểu vấn đề theo cách mà công cụ tài khoản không có.

Heroku xác định bạn theo 2 cách:

Đầu tiên là trong .git / config

[heroku]
    account = acccount_name

Điều này dường như cho phép bạn thực hiện các hoạt động cơ bản bằng cách sử dụng heroku

Cách thứ hai heroku xác định bạn là bằng bất kỳ thao tác nào sử dụng ssh (git đẩy). Heroku sẽ xác định bạn bằng khóa ssh của bạn, như đã nêu ở đây: https://devcenter.heroku.com/articles/keys

Cặp khóa này được sử dụng cho mật mã mạnh và điều đó xác định duy nhất bạn là nhà phát triển khi đẩy các thay đổi mã.

Vì vậy, mỗi tài khoản heroku mà bạn làm việc sẽ phải gửi một khóa khác cho heroku khi sử dụng ssh. Thực hiện theo bất kỳ hướng dẫn để tạo các phím ssh của bạn.

Khóa là nhận SSH để sử dụng các khóa khác nhau cho mỗi tài khoản Heroku. Làm thế nào để bạn cấu hình này? Bạn sẽ cần làm 2 việc:

1) Bạn sẽ cần tạo một miền 'giả' mà .ssh / config của bạn sẽ chặn và cấu hình lại. Điều này sẽ cho ssh tên miền 'thực tế' mà bạn muốn và sử dụng khóa ssh đặc biệt nào.

Host heroku.my_unique_key
  HostName heroku.com
  IdentityFile ~/.ssh/identity.heroku.my_unique_key
  IdentitiesOnly yes

2) Thay đổi .git / config của bạn để sử dụng khi sử dụng git đẩy. Thay vì heroku.com, hãy sử dụng tên miền giả mà bạn đặt trong .ssh / config của bạn

[remote "heroku"]
    url = git@heroku.com.git


[remote "heroku"]
    url = git@heroku.my_unique_key:myapp.git

Đó là nó :) Một chút phức tạp và một chút đơn giản cùng một lúc. Tôi đã mất 3 năm đập đầu vào tường và dùng thử và lỗi để khám phá thông tin này. Nó nên được ghi lại rõ ràng ở đâu đó, nhưng ít nhất đó là một sự khởi đầu.


Điều tên máy chủ duy nhất là vấn đề của tôi. Cảm ơn bạn rất nhiều pixelearth.
FluffyJack

Manyos Gracias por Favour
EE33

9

bạn sẽ cần tạo khóa mới và thêm khóa

chỉ định tên tệp mới sau khi chạy

ssh-keygen

sau đó (trong trường hợp của tôi)

heroku keys:add /home/alex/.ssh/alex_heroku_rsa.pub

3

Tôi có cùng một vấn đề tuần trước. Liên kết này đã giúp tôi ra ngoài. Tôi hy vọng nó sẽ giúp bạn một chút. http://devcenter.heroku.com/articles/keys


Tôi đã thấy liên kết đó, đã cố gắng xóa và thêm khóa của mình một lần nữa, tuy nhiên tôi vẫn không thể làm cho nó hoạt động.
MRE

Bạn đã sắp xếp vấn đề này ra chưa?
Benjamin

1
Bạn có thể tóm tắt các hướng dẫn tại liên kết này? Chúng tôi cố gắng tránh liên kết chỉ câu trả lời ở đây.
đại bàng sáp

Điều này chỉ giải thích cách tạo khóa chứ không phải cách quản lý nhiều khóa.
Macario

3

Trong trường hợp của tôi, heroku keysđã có khóa chính xác được liệt kê. Vì vậy, tất cả những gì tôi phải làm là chạy ssh-add /path/to/that/keyvà sau đó mọi thứ bắt đầu hoạt động tốt.


2

Tôi cũng có hai tài khoản Heorku và như một người làm việc xung quanh tôi đã "mời" tài khoản chính của mình (tài khoản mà Heroku sử dụng tự động) làm cộng tác viên cho dự án của tôi.


1

Chỉ cần wanet để thêm giải pháp cho người dùng Windows.

  1. Lần đầu tiên tải xuống "Trình tạo khóa Putty"

  2. Tạo khóa với OBS, bạn cần di chuyển chuột vào vùng trống để tạo ngẫu nhiên.

  3. Lưu các khóa của bạn, chỉ cần ghi nhớ để đổi tên khóa của bạn thành [name] .pub

  4. Chạy heroku keys:addtrong thiết bị đầu cuối!


0

Trong trường hợp của tôi, vấn đề là phiên bản ssh tôi đang sử dụng. Tôi chỉ đặt biến môi trường GIT_SSH thành một biến khác ("GIT_SSH = / usr / bin / ssh") và mọi thứ đều hoạt động tốt với tôi.

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.