Làm cách nào để tôi nói với Git cho Windows nơi tìm khóa RSA riêng của tôi?


487

Thiết lập Git của tôi chạy tốt trên Linux, nhưng khi tôi cố gắng thiết lập mọi thứ trong Windows (sử dụng Git cho Windows và TortoiseGit ), tôi không biết nên đặt khóa SSH riêng tư của mình ở đâu (hay tốt hơn là làm thế nào để biết sshnó ở đâu nằm). Tôi đang sử dụng tùy chọn ssh.exe tiêu chuẩn trong khi cài đặt Git cho Windows. Thiết lập chạy tốt nếu tôi cho phép xác thực mật khẩu (thay cho RSA) trên máy chủ.


Tôi có cùng một vấn đề, tôi có thể ssh vào hộp dev của mình bằng khóa công khai là "root" bằng chương trình "Git Bash" được cài đặt với "Git For Windows" nhưng tôi không thể đăng nhập là "git" với ngay cả khi tôi đã sao chép tệp "ủy quyền" từ "root" của mình sang người dùng "git" của mình và đặt chính xác các chủ sở hữu và quyền. Tại sao tôi không thể đăng nhập là "git" khi "root" hoạt động với cùng một tệp "ủy quyền". Thay vì "git", nó chuyển lên tất cả các khóa riêng, giống hệt với "root" và yêu cầu nhập mật khẩu. Đây là một máy chủ Centos 5.5.

@fuzzy kẹo mút: Bạn có quyền đúng trên tệp ủy quyền git của người dùng không? Nó phải là chmod 600, và nên được sở hữu bởi người dùng git. Nếu nó thuộc sở hữu của người dùng root, nó sẽ không hoạt động
Dan McClain

có, tất cả các tệp và thư mục là chủ sở hữu và quyền chính xác

Câu trả lời:


486

Đối với Git Bash

Nếu bạn đang chạy msysgit (tôi giả sử bạn là ai) và đang tìm cách chạy Git Bash (tôi khuyên bạn nên dùng nó trên TortoiseGit, nhưng bây giờ tôi nghiêng về CLI hơn GUI), bạn cần tìm ra thư mục chính của bạn là gì cho Git Bash bằng cách bắt đầu sau đó gõ pwd(Trên Windows 7, nó sẽ giống như C:\Users\phsrtôi nghĩ). Trong khi bạn đang ở Git Bash, bạn nên mkdir .ssh.

Sau khi bạn có .sshthư mục chính và một thư mục bên dưới, bạn muốn mở PuTTYgen và mở khóa (tệp .ppk) mà bạn đã tạo trước đó. Khi khóa của bạn được mở, bạn muốn chọn Conversions -> Export OpenSSH keyvà lưu nó vào HOME\.ssh\id_rsa. Sau khi bạn có khóa tại vị trí đó, Git Bash sẽ nhận ra khóa và sử dụng nó.

Lưu ý: Nhận xét cho thấy điều này không hoạt động trong mọi trường hợp. Bạn có thể cần sao chép khóa OpenSSH sang Program Files\Git\.ssh\id_rsa(hoặc Program Files (x86)\Git\.ssh\id_rsa).

Dành cho rùaGit

Khi sử dụng TortoiseGit, bạn cần đặt khóa SSH thông qua các hướng của nhịp độ . Bạn cần phải làm điều đó cho mọi kho lưu trữ bạn đang sử dụng TortoiseGit.


4
hướng dẫn của tốc độ cho tortoisegit sẽ không hoạt động cho đến khi bạn có kho lưu trữ (vì cài đặt cấu hình 'từ xa' không xuất hiện trừ khi bạn hành động trên repo) và có thể bạn không thể có được kho lưu trữ ở vị trí đầu tiên nếu bạn có thể ' t xác thực bản thân để sao chép từ nguồn gốc. Khó khăn!
Kylotan

43
Với GitBash, tôi thấy rằng tôi phải sao chép ~/.ssh/id_rsatệp của mình vào Program Files\Git\.ssh\id_rsa- điều này hơi khó hiểu, nhưng bây giờ IntelliJ và Windows cmd có thể đẩy các kho lưu trữ sử dụng xác thực khóa.
JP.

7
Tương tự như vậy. Tôi vừa cài đặt git-for-windows, tôi đang chạy nó từ cmd.exe. Tôi cần phải đặt các tập tin id_rsaid_rsa.pubvào c:\program files (x86)\Git\.ssh. Các .sshdir đã có mặt. Cảm ơn, JP.
Cheeso

5
Đoạn thứ hai là vàng. :)
Bjørn

4
@Damon: Không nên id_rsacó phần mở rộng. Đó là tên tệp, nó không phải là một thư mục
Dan McClain

107

Sử dụng ứng dụng khách SSH tích hợp được cung cấp cùng với Git cho Windows, bạn cần thiết lập biến môi trường HOME để máy khách Git SSH có thể tìm thấy khóa.

Ví dụ, trên bản cài đặt Windows Vista , điều này sẽ được thực hiện bằng cách phát hành setx HOME c:\Users\admin\trên dòng lệnh.

Nó làm cho ngày của tôi và khắc phục sự cố với Git miễn là khóa riêng của bạn không được bảo vệ bằng mật khẩu. Nếu bạn muốn sử dụng ssh-agent, thì có lẽ bạn có thể chạy ssh-agent cmd.exe (mặc dù tôi chưa bao giờ làm điều đó) và ssh-add như bình thường.

Lưu ý rằng tất cả các công cụ Git / SSH được cho là được chạy từ cmd.exe để không nhấp nháy cửa sổ.

Nếu điều này không hoạt động chính xác, có thể sử dụng plink bằng cách điều chỉnh GIT_SSH . Tham khảo tất cả các hướng dẫn SVN + ssh; về cơ bản đây là hệ thống ống nước giống như bạn cần thiết lập.


16
Đây là những gì tôi đang tìm kiếm vì tôi đang cố gắng sử dụng dấu nhắc lệnh của Windows chứ không phải git bash.
John Ruiz

Đẹp, dễ sửa chữa nhưng sẽ rất khó để tìm ra nếu không có điều này!
thaddeusmt

Điều quan trọng là cũng không có khoảng trống giữa HOME = và c: \ ... Giải pháp của Oct đã giúp tôi. :-)
Lutz

2
Các setx HOME c:\Users\admin` command doesn't seems to be working in Git Bash. You have to use cmd` thay vào đó.
trejder

2
+1GIT_SSH=c:\pathto\plink.exe
Nick Grealy

54

Bạn có thể chỉ định vị trí chính cho TortoiseGit theo cách sau:

  • Mở một cửa sổ Explorer.
  • Mở Contextmenu và điều hướng TortoiseGitCài đặt
  • Trong cửa sổ hiện đang mở, điều hướng đến GitRemote
  • Đặt đường dẫn đến khóa PuTTY của bạn trong hộp nhập tương ứng.

Một ảnh chụp màn hình bên dưới:

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


8
Ngoài ra, nếu bạn cần chuyển đổi khóa riêng thành định dạng '.ppk' từ định dạng khác, bạn có thể theo dõi NÀY
Tariq M Nasim

Nó làm việc cho tôi.
Maxim Eliseev

6
Git> Remote chỉ xuất hiện khi bạn nhân bản thành công kho lưu trữ.
Steve Pitchers

5
Một giải pháp dễ dàng hơn nhiều là thiết lập mọi thứ hoạt động bình thường trong git (sử dụng openSSH), sau đó báo cho TortoiseGit sử dụng ssh.exe được sử dụng bởi git. Xem stackoverflow.com/a/33328628/318317 Bằng cách đó, bạn chỉ cần sửa lỗi này một lần.
Daniel Rose

50

Không có câu trả lời trước làm việc cho tôi. Đây là những gì làm việc cho tôi cuối cùng. Nó thực sự khá đơn giản, nếu bạn biết phải gõ gì. Nó không cần PuTTY.

  • Mở dấu nhắc Git Bash
  • Nhập 'ssh-keygen'
    • Chấp nhận vị trí mặc định
    • Chọn một cụm mật khẩu trống (vì vậy chỉ cần nhấn 'nhập' cho tất cả các câu hỏi ')
  • Bây giờ sao chép khóa công khai vào máy chủ của bạn, ví dụ: scp ~ / .ssh / id_rsa.pub someuser@someserver.com: ~

Đó là bit trên máy tính của riêng bạn được thực hiện. Bây giờ sshvào máy chủ đích, sau đó làm

mkdir -p ~/.ssh
cd ~/.ssh
cat ../id_rsa.pub >> authorized_keys
rm ../id_rsa.pub

Đó là nó! Bạn đã hoàn tất! Từ Git Bash, làm như sau để kiểm tra:

ssh someuser@someserver.com ls

Nếu nó liệt kê các tệp trong thư mục chính của bạn trên máy chủ Git, thì bạn đã hoàn thành!

Đối với GitHub, bạn không có quyền truy cập shell vào máy chủ của họ, nhưng bạn có thể tải lên khóa bằng trang web của họ, vì vậy, với bit 'bây giờ sao chép vào máy chủ của bạn', hãy làm:

  • Trong Git Bash, nhập 'cat ~ / .ssh / id_rsa.pub', chọn kết quả và sao chép nó vào bảng tạm.
  • Trên trang web GitHub, đi tới settings Cài đặt tài khoản ',' Khóa SSH và GPG ', nhấp vào' Khóa SSH mới 'và dán khóa.

8
Đừng tạo khóa mà không có cụm mật khẩu. Giống như đặt mật khẩu của bạn vào một tệp văn bản, ngoại trừ việc mọi người đều biết vị trí mặc định cho các khóa riêng.
GregB

14
Bạn đang trả lời sai câu hỏi. Q là cách trỏ đến khóa riêng hiện có.
Orangutech

7
@GregB, tôi nhìn nó như thế này: bất kỳ máy chủ nào tôi tạo khóa không có mật khẩu đều an toàn như máy tính xách tay của tôi, đó là một phần mở rộng của vành đai bảo mật của máy tính xách tay của tôi. Trên thực tế, thậm chí, vì thư mục nhà của tôi được mã hóa ;-) Vì vậy, nó an toàn như phân vùng nhà được mã hóa trên máy tính xách tay của tôi, 'đủ tốt' để đảm bảo quyền truy cập vào github, theo ý kiến ​​của tôi. (có thể thay đổi theo ý kiến ​​của bạn trong khóa học!)
Hugh Perkins

3
@GregB Đừng rơi vào hoang tưởng! :] Chắc chắn rằng việc sử dụng các khóa được bảo vệ bằng mật khẩu sẽ an toàn hơn nhiều so với sử dụng mật khẩu, nhưng cho rằng khóa không có mật khẩu này rất dễ bị phá vỡ vì việc lưu trữ mật khẩu trong tệp văn bản là sai rõ ràng. Tôi đã thấy nhiều hướng dẫn, khuyến khích người dùng sử dụng các khóa được bảo vệ bằng mật khẩu, nhưng tôi chưa bao giờ thấy bất kỳ khiếu nại nào, rằng sử dụng chúng mà không có mật khẩu là không an toàn. Ngoài ra: một số hệ thống không hỗ trợ các giải pháp ghi nhớ mật khẩu của khóa, do người dùng nhập và yêu cầu mật khẩu, mỗi lần sử dụng khóa. Điều này làm cho việc sử dụng các khóa SSH trở nên vô nghĩa trong tình huống này.
trejder

4
Vì mục đích của cuộc trò chuyện, đã sai lệch so với câu hỏi ban đầu, các khóa SSH chắc chắn an toàn hơn về mật mã so với mật khẩu, nhưng bảo mật đó bị rủi ro khi không mã hóa các khóa SSH của bạn. Cách tiếp cận cá nhân của tôi là mở khóa các khóa của tôi vào đầu ngày bằng cách sử dụng một tác nhân SSH, sau đó giữ các khóa được giải mã trong bộ nhớ để tôi không cần nhập lại mật khẩu trong suốt cả ngày. Như @Hugh Perkins bình luận, và tôi đang diễn giải, tất cả các bạn đều biết các yêu cầu bảo mật của bạn tốt hơn tôi / chúng tôi làm :).
GregB

38

Nếu bạn đang sử dụng msysgit với các công cụ OpenSSH, bạn cần tạo ~/.ssh/id_rsahoặc tạo cấu hình Git trong ~/.ssh/configđó trỏ đến khóa của bạn.

Dưới đây là ví dụ về cấu hình Git cho Bitbucket sẽ sử dụng tên người dùng chính xác và một khóa khác với khóa mặc định (trong trường hợp bạn duy trì một khóa cho các kết nối SSH và một khóa khác cho tài khoản Git).

~ / .ssh / config :

Host bitbucket.org
    Hostname bitbucket.org
    User git
    IdentityFile /C/keys/yourkey.key

Khi ở trong Git Bash, bạn có thể chạy hai lệnh để thêm khóa vào ssh-agent của phiên hiện tại để tránh phải nhập lại mật khẩu của khóa.

eval `ssh-agent`
ssh-add /C/keys/yourkey.key

1
Tôi đã làm điều này nhưng với github.com: Host github.com IdentityFile ~ / .ssh / github_rsa
Sarah Vessels

1
Nếu bạn có một khoảng
trắng

Tôi thích cách này, vì điều này cho phép tôi kết nối nhanh các khóa tồn tại từ PC khác
Kirill Gusyatin

.Gitconfig của tôi có các phần. Tôi nên đặt những máy chủ này ở khu vực nào?
Steve Yakovenko

16

Tôi chỉ đặt% HOME% =% HOMEPATH%

Điều này có lợi thế làm việc cho tất cả người dùng đăng nhập vào hệ thống (mỗi người dùng nhận được các thư mục .ssh riêng).

Trong Vista:

  1. Nhấp chuột phải vào Máy tính
  2. Chọn thuộc tính
  3. Nhấp vào Cài đặt hệ thống nâng cao
  4. Nhấp vào Biến môi trường
  5. Trong phần dưới cùng (Biến hệ thống) Nhấp vào Mới
  6. Đối với loại tên biến: HOME
  7. Đối với loại đường dẫn biến:% HOMEPATH%
  8. Nhấn vào OK

6
Trong trường hợp của tôi, tôi đã thêm HOME =% USERPROFILE%
igor

1
Lưu ý rằng %HOMEPATH%không chứa các ký tự ổ đĩa, vì vậy nếu nguồn của bạn không phải là về C:bạn cần để thêm vào trước C:để %HOME%.
Graeme Perrow

set %HOME%=%HOMEPATH%đã làm cho tôi! Cảm ơn bạn!!
teng

7

Khóa riêng của bạn cần được thêm vào tác nhân SSH trên máy trạm của bạn. Cách bạn đạt được điều này có thể phụ thuộc vào ứng dụng khách git nào bạn đang sử dụng, tuy nhiên puTTY và đại lý liên kết của nó (cuộc thi) có thể thực hiện thủ thuật cho bạn, đây là liên kết đến các tệp nhị phân và nguồn chính thức:

http://www.chiark.greenend.org.uk/~sgtatham/putty/doad.html


Tôi đã nói ở trên rằng tôi đang sử dụng Git cho Windows và tôi đang sử dụng ssh.exe (đóng gói w / git) thay cho putty. Phải có một số thực hành tiêu chuẩn để thêm khóa riêng, tôi dường như không thể tìm ra cách. Mặc dù phần mềm chuyển đổi thực sự có thể cho phép tôi đăng nhập, nhưng có một cách để làm điều đó với thiết lập Git tiêu chuẩn, phải không?
nhị phân

Xin lỗi tôi không làm việc trên windows, chỉ có linux. Nhưng chìa khóa phải có trong tác nhân SSH của bạn. Có một tác nhân.exe hoặc một cái gì đó dọc theo những dòng đó?
Declan Shanaghy

1
Vâng, thiết lập là bánh ở phía linux. Nhưng tôi đã có nó làm việc trên Windows quá tiếc. Có một số tệp thực thi liên quan đến ssh trong thư mục git / bin trên hộp Windows (ssh, ssh-add, ssh-agent, ssh-keygen & ssh-keyscan), nhưng tôi không biết cách tạo bất kỳ tệp nào trong số đó làm bất cứ gì. Họ chỉ cần nháy một cửa sổ cmd mở và đóng ngay lập tức. Tôi bối rối.
nhị phân

8
Cuộc thi thực sự giải quyết được vấn đề cho tôi - Tôi có một phím tắt trong thư mục Khởi động của Menu bắt đầu ( C:\Users\owen.blacker\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup) để "C:\Program Files (x86)\PuTTY\pageant.exe" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerPersonal.ppk" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerWork.ppk"nó tải các khóa SSH của tôi khi khởi động và điều này làm cho GIT "chỉ hoạt động": o)
Owen Blacker

@OwenBlacker OMFG! Bạn chắc chắn nên viết bình luận này như một câu trả lời kích thước đầy đủ ! Đây là giải pháp duy nhất ở đây , thực sự đã giúp tôi và giải quyết vấn đề của tôi! Đáng tiếc, tôi chỉ có thể cung cấp cho bạn +1! :]
trejder

6

Trong trường hợp của tôi, tôi đã sử dụng Git cho Windows trong bộ chứa Docker windowsservercore.

Git của tôi đã được cài đặt bởi Chocolatey tới C:\Program Files\Git.

Tôi đã phải cập nhật các tập tin C:\Program Files\Git\etc\ssh\ssh_configvới điều này:

Host example.com
   Identityfile ~/.ssh/id_rsa

Sau đó, tôi đã có thể sử dụng khóa từ C:\Users\<user>\.ssh\id_rsa

Nếu bạn đang sử dụng Git cho các cửa sổ cùng với OpenSSH cho Windows. Git vẫn đang sử dụng riêng của mình ssh.

Ngoài ra nếu bạn có kế hoạch sử dụng ssh-keyscan host.com > known_hoststừ OpenSSH, hãy cẩn thận bởi vì sản lượng đường ống từ stdoutcủa keyscan(trên Windows) thay đổi mã hóa để UCS-2, nhưng OpenSSH có thể chỉ đọc UTF-8! Vì vậy, hãy chắc chắn để thay đổi known_hostsmã hóa tập tin.


Điều này có ích, nhưng với bất kỳ ai đang sử dụng khóa id_dsa, bạn cũng sẽ cần thêm "PubkeyAcceptedKeyTypes ssh-dss" trong máy chủ của mình.
Michael Russo

4

OK, tôi nhìn vào gợi ý của ..

Nhưng việc đặt các khóa SSH riêng tư của tôi vào thư mục công cộng tôi không nghĩ đó là một ý tưởng hay, vì vậy tôi bắt đầu tìm kiếm nơi có kiến ​​thức.

Vì vậy, nếu bạn muốn bảo vệ chính xác khóa SSH của mình, bạn cần đặt khóa của mình vào thư mục sau:

Đối với Windows 7, 8 và 8.1 32-bit:

C: \ Users \\ AppData \ Local \ VirtualStore \ Chương trình tập tin \ Git \

Đối với Windows 7, 8 và 8.1 64-bit:

C: \ Users \\ AppData \ Local \ VirtualStore \ Program Files (x86) \ Git \


Đây là giải pháp đơn giản nhất trên máy Win7 của tôi. Giống như bạn, tôi đã tìm kiếm known_hosts. Chắc chắn, nó đã ở trong C:\Users\Dave\AppData\Local\VirtualStore\Program Files (x86)\Git\.ssh. Bằng cách đặt tệp khóa của tôi (id_rsa) trong thư mục đó, ssh đã có thể tìm thấy nó mà không cần khiếu nại. Tôi đã đọc một chút - đây là cách Windows xử lý phần mềm (di sản) cố gắng ghi vào các khu vực bị cấm (chẳng hạn như "C: \ Program Files \"), vì vậy ssh của Git hoàn toàn không biết rằng nó đang ghi vào thư mục VirtualStore, Windows đang xử lý một cách minh bạch. Ít nhất những tập tin này thuộc về một người dùng!
DaveGauer

4

Cách hiệu quả nhất là sử dụng Pagete vì nó sẽ cho phép bạn viết cụm mật khẩu chỉ một lần vào đầu phiên thay vì mỗi lần đẩy. Tất cả các câu trả lời ở đây quá ngắn, vì vậy tôi sẽ đăng một hướng dẫn chi tiết tại đây:

  1. Tải pageant.exe, puttygen.exe, putty.exeplink.exetừ trang web của PuTTY. Đặt chúng trong C:\puttyToolsthư mục.
  2. Chạy đi puttygen.exe.
  3. Nhấn vào nút Generate.
  4. Lắc chuột xung quanh ở phần trên cùng của cửa sổ cho đến khi thanh tiến trình đầy, như chương trình yêu cầu bạn làm.
  5. Cung cấp một cụm mật khẩu và lặp lại nó trong hộp văn bản tiếp theo.
  6. Nhấp vào "Lưu khóa riêng". Thư mục thông thường để lưu chúng trong là %USERPROFILE%\_ssh(trong máy tính của tôi bản đồ này C:\Users\andres\.ssh\). Không quan trọng bạn gọi chìa khóa là gì, nhưng với mục đích trình diễn, tôi sẽ gọi nó github.ppk. Tập tin này nên có phần mở rộng là .ppk.
  7. Sao chép văn bản trong hộp văn bản trên cùng trong PuTTYgen, văn bản được gắn nhãn Public key for pasting into OpenSSH authorized_keys filevà dán nó vào khóa SSH mới trong cài đặt của GitHub. Đặt cho nó một tiêu đề mô tả máy nào đang bật khóa (ví dụ: "Máy tính xách tay làm việc").
  8. Chạy pageant.exe, một biểu tượng systray mới sẽ xuất hiện.
  9. Nhấp chuột phải vào biểu tượng -> Thêm phím.
  10. Xác định vị trí tệp ppk của bạn, nhập cụm mật khẩu của bạn.
  11. Tạo các biến môi trường người dùng mới này (thông qua tìm kiếm ứng dụng Environthông qua WindowsMothy sẽ tìm thấy Edit environment variables for your account): GIT_SSH = "C:\puttyTools\plink.exe"SVN_SSH = "C:\puttyTools\PuTTY\plink.exe"
  12. Mở putty.exe và cố gắng kết nối với máy chủ lưu trữ nơi bạn lưu trữ kho Git của bạn. Ví dụ: thử kết nối với github.com qua SSH và một hộp thoại sẽ hỏi bạn nếu bạn chấp nhận dấu vân tay của máy chủ: nhấp vào CÓ.
  13. Chạy một phiên bản mới của MINGW64bảng điều khiển Git của bạn và xác minh rằng các biến môi trường ở đó bằng cách viết lệnh env | grep -i ssh.
  14. Bạn nên được thiết lập tất cả. Cố gắng sao chép với giao thức Git + SSH từ máy chủ của bạn.

(Được trích xuất ban đầu từ hai hướng dẫn này mà tôi đã kết hợp trong một: Cách thiết lập Git cho Windows và Định cấu hình MinGW-W64 + MSYS để sử dụng PuTTY Plink / Pagete .)


3

Khi trộn GitHub cho Windows và Git GUI cho Windows, bạn có thể gặp phải các vấn đề trong đó Git GUI liên tục nhắc bạn nhập tên người dùng và mật khẩu. Cách chữa cho việc này là thay đổi URL từ xa https:(đó là những gì GitHub cho Windows tạo ra) thành giao thức Git. Trong .gitthư mục trong tệp cấu hình, tìm:

[remote "origin"]
   url = https://github.com/**username**/**reponame**.git
   fetch = +refs/heads/*:refs/remotes/origin/*

Thay đổi nó thành:

[remote "origin"]
    url = git@github.com:**username**/**reponame**.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Vâng, nó rất khó chịu. Thật tự nhiên và dễ dàng để sao chép một repo với github cho GUI GUI, nhưng khi sử dụng git cui bên ngoài vỏ git không thành công. Tôi tự hỏi làm thế nào lệnh git trong shell git hoạt động với url https ...
hiroshi

cho SSH là tiền tố luôn git@{SERVER URL}?
nmz787

Vâng, theo như tôi từng thấy :)
IDis Dùng

Đã có điều này - vẫn hỏi tôi mọi lúc
Ian Grainger

3

Vị trí tiêu chuẩn cho các tập tin là trong %USERPROFILE%\.ssh.

%USERPROFILE%là tương đương với $ HOME trong Unix (thường ánh xạ tới một cái gì đó như c:\users\youruserid).

Nếu bạn đang sử dụng các công cụ SSH đi kèm với Git, là các công cụ dòng lệnh Unix tiêu chuẩn, bạn có thể sử dụng một cái gì đó giống như tập lệnh của tôi ở đây để làm việc với ssh-agent trên tất cả các shell.


Đối với độc giả trong tương lai, %USERPROFILE% is the equivalent of $HOMEkhông tương đương $HOME. Rất nhiều ứng dụng Linux hoạt động xấu được chuyển sang Windows đối xử với hai e giống nhau nhưng chúng không nên được xử lý như nhau.
Micah Zoltu

Micah, bạn có thể thông báo sự khác biệt trong ý định cho điều đó? Ngoài ra, ngay cả với mục đích khác nhau, dường như nếu tất cả các công cụ sử dụng cái này như cái kia, thì nó không thực sự trở thành tương đương?
Eric Blade

Các công cụ sử dụng %USERPROFILE%trên Windows giống như $HOMEtrên Linux đang vi phạm các tài liệu / thực tiễn tốt nhất để phát triển Windows (được MS xuất bản từ lâu và được cập nhật theo thời gian). Có nhiều công cụ thực hiện điều này, nhưng đối số để theo dõi chúng rất giống với đối số "X trả tiền trong nhóm, vì vậy chúng ta cũng nên như vậy." USERPROFILElà nơi người dùng lưu trữ tài liệu họ tạo / lưu (ví dụ: lưu hộp thoại). APPDATAdành cho dữ liệu cấu hình trên mỗi người dùng. LOCALAPPDATAdành cho bộ nhớ cache trên mỗi người dùng và các tệp lớn. PROGRAMDATAdành cho cấu hình và bộ nhớ cache trên toàn máy.
Micah Zoltu

Nói chung, các công cụ duy nhất hoạt động sai với USERPROFILE là các công cụ được viết bởi các nhà phát triển Linux và sau đó được chuyển sang Windows. Là một nhà phát triển, bạn có thể sử dụng rất nhiều trong số này để có cảm giác như "mọi người đang làm điều đó" nhưng bên ngoài hệ sinh thái công cụ phát triển, hầu hết các ứng dụng Windows thực sự là những công dân tốt. Ngay cả Microsoft đôi khi cũng mắc sai lầm khi không đặt mọi thứ vào đúng chỗ (họ là một công ty lớn), mặc dù nói chung khi bạn chỉ ra cho họ, họ nỗ lực giải quyết vấn đề và tuân theo các hướng dẫn của HĐH.
Micah Zoltu

1
(xin lỗi, giới hạn ký tự StackExchange trên các bình luận). Dưới đây là chi tiết hơn về các thư mục và một mô tả ngắn gọn về những gì đi trong mỗi thư mục. Ngoài ra còn có các tài nguyên khác, bao gồm các bài đăng blog tiêu thụ nhiều hơn, nhưng bài viết này cung cấp độ chính xác kỹ thuật cao nhất: technet.microsoft.com/en-us/l
Library / cc749104 (v = ws.10) .aspx

2

Tôi đã có vấn đề tương tự và không có câu trả lời nào ở đây giải quyết vấn đề. Hóa ra, cặp khóa của tôi ban đầu được tạo với một cụm mật khẩu trống. (Tôi biết, ngu ngốc.)

Khi tôi tạo một cặp khóa mới và tải khóa công khai lên GitHub, mọi thứ bắt đầu hoạt động trở lại.


1
điều này. ughhhhhhhhhhhhh. tạm biệt 2 giờ
Scoop

1

Câu trả lời sau đây cũng áp dụng cho câu hỏi này khi chạy ssh từ Tài khoản dịch vụ Windows: Jenkins (Dịch vụ Windows) với Git qua SSH


Theo liên kết bạn cung cấp, tôi có thể nhận được thiết lập Jenkins của mình. Tôi cần đặt biến môi trường HOME thành đường dẫn chương trình Git chứa thư mục .ssh Tôi đã tạo khóa SSH của mình.
Spechal

1

Bạn có thể chỉ định cả đường dẫn đến khóa và tên của tệp khóa như vậy (trên Ubuntu). Ví dụ:

ssh -i /home/joe/.ssh/eui_rsa

Điều này hoàn toàn giải quyết vấn đề và cho phép bạn lưu trữ chìa khóa của bạn bất cứ nơi nào bạn muốn.
DaveGauer

Câu hỏi cụ thể là về các cửa sổ. Tôi có git trên máy Ubuntu của tôi hoạt động như thế này, nhưng tôi không thể biết phải cài đặt GIT_SSH_COMMANDgì trên máy Windows của mình.
mjaggard

1

Pagete (một tác nhân SSH được cung cấp cùng với gói PuTTY ) giải quyết vấn đề cho tôi.

Tôi có một lối tắt trong thư mục Khởi động của Menu bắt đầu ( C:\Users\owen.blacker\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup) để "C:\Program Files (x86)\PuTTY\pageant.exe" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerPersonal.ppk" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerWork.ppk"nó tải các khóa SSH của tôi khi khởi động và điều này làm cho Git "chỉ hoạt động": o)


4
Tôi nghĩ rằng bạn cần một số cài đặt khác chính xác để nó hoạt động (chẳng hạn như GIT_SSH được đặt thành TortoisePLink.exe?), Và mặc dù trước đây nó đã hoạt động với tôi, tôi thường gặp vấn đề với nó trên các máy khác. :-(
Simon East

Tôi nhận được 'Không thể mở tệp' từ Pagete :( Mà tôi biết được thiết lập chính xác khi tôi đang sử dụng nó cho TortoiseGit :(
Ian Grainger

1

Nhiều câu trả lời nói điều này, nhưng đối với tôi không đủ nhanh!

trong windows sử dụng msys (bảng điều khiển windows tiêu chuẩn) C:\Users\{you}\.ssh\id_rsa

Về cơ bản, nó không bận tâm đến việc quét các phím đã cài đặt (ít nhất là không phải trên máy tính xách tay mới của tôi) và do đó cần đặc biệt id_rsa

Tôi bắt gặp điều này muốn sao chép một số công việc riêng tư trong ruby ​​MSYS CLI cho windows 10 64-bit


0

Nếu bạn đang dùng Windows 7/8, bạn nên tìm trong C: \ Users \ Your_User_Name.ssh Chỉ cần sao chép và dán tệp id_rsa của bạn vào đây và tất cả sẽ hoạt động tốt.


0

Một lỗi tôi đã mắc phải khi sử dụng SSH trên Windows là khi tôi cố gắng sử dụng các khóa thông qua ứng dụng khách Git Bash, tất cả các tệp trong ~ / .ssh đều là các quyền sai, nhưng nó không cố nói với tôi rằng đó là một quyền vấn đề.

Cũng giống như thử nghiệm, đảm bảo bạn đã đặt mọi thứ trong thư mục ~ / .ssh của mình thành chmod 600.


0

Nếu bạn có các quyền cần thiết trên máy Windows và chính sách của bạn cho phép, tôi khuyên bạn nên cài đặt Cygwin ( https://cygwin.com/ ), đặc biệt xem xét rằng bạn có kinh nghiệm trước với Linux. Cygwin sẽ cho phép xử lý các khóa ssh của bạn như trên các máy Linux / Unix khác. Và nó cung cấp quyền truy cập vào hầu hết tất cả các công cụ cli của Linux.


1
Nó là hoàn toàn hợp lý để thực hiện các đề xuất như thế này như là ý kiến. Nhưng vì câu hỏi yêu cầu rõ ràng git cho windows, bạn nên bỏ phiếu để đăng bài này dưới dạng câu trả lời.
cướp

0

TortoiseGit cho phép bạn chỉ định khóa sẽ sử dụng khi sao chép kho lưu trữ. Chỉ cần kiểm tra "Tải khóa Putty" và duyệt đến .ppktệp, như trong ảnh chụp màn hình:https://i.stack.imgur.com/lAyzT.png


Nếu bị tắt, kiểm tra Settings... -> Network -> SSH clientđược đặt thànhC:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
Nikita Bosik

0

Tôi đã khắc phục sự cố trên bằng cách tạo

~ / .ssh / config

tập tin và đặt:

IdentityFile C:\Users\adria\.ssh\mysshkey

0

Đọc bình luận của bạn để trả lời câu trả lời của Declan, trước tiên hãy thử mở một dấu nhắc lệnh (Bắt đầu → Chạycmd ) và sau đó điều hướng đến thư mục git / bin đó và chạy ssh-keygen. Về mặt lý thuyết sẽ tạo ra khóa RSA và đặt nó vào thư mục thích hợp. Sau đó, bạn chỉ cần tìm nó và chia sẻ khóa công khai của bạn với mọi người.

Lý do cửa sổ "nhấp nháy" là vì Windows chạy chương trình và khi nó thực thi, nó sẽ đóng dấu nhắc lệnh, nghĩ rằng bạn đã hoàn thành nó, khi bạn thực sự cần đầu ra.


0

Sử dụng v0.17 của Git Gui trên Windows, tôi đã nhấp vào lệnh menu sau: Trợ giúpHiển thị Khóa SSH .

Một hộp thoại xuất hiện có tên Khóa công khai OpenSSH của bạn . Tôi đã tạo một khóa và sao chép nó vào clipboard. Sau đó, tôi tiếp tục làm theo các hướng dẫn thiết lập-ssh trên githelp từ Bước ba trở đi. Sau đó, Git Gui liên lạc với GitHub một cách im lặng - không cần nhập bất kỳ thông tin xác thực nào.


0

Trên hệ thống Windows 7 của tôi, Git Gui tìm khóa RSA trong userprofile/.sshthư mục hoặc cụ thể hơn c:/users/yourusername/.ssh/.

Phần khó khăn cho thiết lập của tôi là khiến máy chủ được chia sẻ tại hostmonster chấp nhận khóa. Cách duy nhất tôi có thể làm cho nó hoạt động là sử dụng Git Gui để tạo các cặp khóa (không có mật khẩu), sau đó sao chép và dán khóa chung thông qua bảng điều khiển, ssh, quản lý khóa.

Để bắt đầu từ đầu, bạn phải tạo các khóa trong Git Gui bằng cách vào menu Trợ giúp , Hiển thị khóa SSH , sau đó Tạo Khóa . Bây giờ bạn sẽ có hai khóa mới trong .sshthư mục. Mở .pubtệp và sao chép nội dung.

Đăng nhập vào bảng điều khiển của bạn trên máy chủ được chia sẻ và truy cập SSH , Quản lý khóa SSHNhập khóa . Dán vào hộp Công khai và đảm bảo bạn đặt tên đúng mà không cần phần mở rộng-- là của tôi id_rsa. Bây giờ bạn phải ủy quyền khóa bằng cách sử dụng liên kết quản lý ủy quyền, vì vậy nó sẽ được nối vào authorized_keystệp.

Bây giờ Git Gui và Git Bash của bạn sẽ có thể đẩy bằng SSH mà không cần phải nhập mật khẩu. Điều kỳ lạ là tôi đã có thể sử dụng SSH thông qua Git Bash và Git Gui rất tốt trên các máy chủ của riêng tôi chạy Linux, đó chỉ là dịch vụ lưu trữ được chia sẻ mang lại cho tôi sự phù hợp. Tôi hy vọng điều này sẽ giúp được ai đó vì tôi đã mất hàng giờ dùng thử và lỗi để đưa ra điều này - và nó thật đơn giản!


0

Nếu bạn đang sử dụng dòng lệnh Git cho Windows, bạn có thể làm như sau:

Mở cmd.exevà thực hiện setx HOME c:\PATH_TO_PRIVATE_KEY.

Tạo một thư mục mới .ssh, (nếu không tồn tại) bên trong c:\PATH_TO_PRIVATE_KEYvà sao chép id_rsatệp của bạn (khóa riêng của bạn) vào đó.

Làm xong. Bây giờ bạn có thể sử dụng dòng lệnh Git bình thường.


0

My msysgit OpenSSL / Bash Git kinh nghiệm (không Plink PuTTY) là thứ tự tìm kiếm cho bạn .ssh/thư mục như sau.

  1. %HOME%/.ssh/
  2. %HOMEDRIVE%%HOMEPATH%/.ssh/
  3. %USERPROFILE%/.ssh/

Do đó tại sao rất nhiều người đề nghị thiết lập HOMEnếu một trong những người khác không phải là những gì bạn mong đợi. Quan trọng hơn, bạn có thể tự kiểm tra; để gỡ lỗi sử dụng ssh -vđến một máy chủ sử dụng xác thực khóa chung như sau:

$ ssh -v git@github.com
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Reading configuration data /d/.ssh/config
...
debug1: identity file /d/.ssh/identity type -1
debug1: identity file /d/.ssh/id_rsa type 1
debug1: identity file /d/.ssh/id_dsa type -1
...
debug1: Next authentication method: publickey
debug1: Trying private key: /d/.ssh/identity
debug1: Offering public key: /d/.ssh/id_rsa
..
Hi kcd83! You've successfully authenticated, but GitHub does not provide shell access.

Chúng tôi tìm thấy sshtìm kiếm trên một ổ đĩa tối nghĩa và không có câu trả lời nào trước đó dường như giải thích những gì chúng tôi thấy.

Đôi khi, %HOMEDRIVE%%HOMEPATH%một ổ đĩa mạng được ánh xạ (ví dụ H:/) gây ra lỗi không cần thiết khi có sự cố mạng / máy chủ tệp, ngay cả khi %USERPROFILE%/.sshC:/Users/Username/.sshvà có các khóa cục bộ. Cài đặt %HOME%để %USERPROFILE%dừng nó nhìn vào ổ đĩa từ xa.


0

Bạn cũng có thể tải Đại lý PuTTY (cuộc thi) và thêm khóa riêng bạn đã tạo bằng PuTTY cho máy chủ.

Git nhận ra điều này và sử dụng nó để đẩy / kéo.


0

Tôi đã sử dụng TortoiseGit cũng như Git Bash trên Windows, tùy theo nhu cầu. Tôi đã thêm mọi thứ vào TortoiseGit và nó hoạt động tốt, nhưng Git Bash đã không chọn nó ngay cả khi các phím nằm trong thư mục chính xác. Hóa ra tôi phải làm điều này từ Git Bash:

ssh-add C:\\Users\\<YOUR_USER>\\.ssh\\id_rsa

Tất nhiên bạn có thể thay đổi đường dẫn đến bất cứ nơi nào khóa của bạn được đặt, hãy nhớ sử dụng \\làm dấu phân cách.


0

Nếu sử dụng Git cho Windows, một khi các khóa SSH đã được tạo, bạn phải thêm khóa SSH của mình vào ssh-agent.

Xem phần Tạo khóa SSH mới và thêm nó vào ssh-agent .

eval $(ssh-agent -s)

// Tell where the keys are located

ssh-add ~/.ssh/id_rsa

Chào mừng bạn đến với Lỗi Máy chủ. Câu hỏi này đã có một câu trả lời được chấp nhận rộng rãi được chấp nhận vài năm trước. Tiếp tục tìm kiếm những câu hỏi mới hơn hoặc những câu hỏi có thể được cải thiện đáng kể.
Matthew Wetmore

1
câu trả lời được chấp nhận rộng rãi không có tác dụng với tôi trong khi câu trả lời này thì có. Tôi tin rằng nó có thể giúp ai đó biết khóa phải được thêm vào tác nhân ssh và nó có thể được thực hiện với 2 dòng hướng dẫn
Matoeil
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.