2015-12-10 11 views
102

Tôi đang cố gắng tạo kho lưu trữ git trên máy chủ lưu trữ web của mình và sao chép nó trên máy tính của tôi. Dưới đây là những gì tôi đã làm:Không thể thương lượng với XX.XXX.XX.XX: không tìm thấy loại khóa máy chủ phù hợp. Đề nghị của họ: ssh-dss

  1. Tôi đã tạo một kho lưu trữ trên máy chủ từ xa.
  2. Tôi đã tạo một cặp khóa: ssh-keygen -t dsa.
  3. Tôi đã thêm khóa của mình vào ssh-agent.
  4. Tôi đã sao chép vào khóa công khai của máy chủ trong ~/.ssh.

Và rồi, sau một nỗ lực để chạy lệnh git clone ssh://[email protected]/path-to-repository, tôi nhận được một lỗi:

Unable to negotiate with XX.XXX.XX.XX: no matching host key type found. Their offer: ssh-dss
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

Điều đó có nghĩa gì?

+0

Xem https://security.stackexchange.com/questions/112802/why-openssh-deprecated-dsa-keys –

Trả lời

160

Phiên bản mở khóa gần đây không được chấp nhận bằng các khóa DSA theo mặc định. Bạn nên đề nghị nhà cung cấp GIT của bạn thêm một số khóa máy chủ hợp lý. Chỉ dựa vào DSA không phải là một ý kiến ​​hay.

Để giải quyết sự cố này, bạn cần thông báo cho máy khách ssh rằng bạn muốn chấp nhận khóa máy chủ DSA, như được mô tả trong official documentation for legacy usage. Bạn có vài khả năng, nhưng tôi khuyên bạn nên để thêm những dòng này vào ~/.ssh/config tập tin của bạn:

Host your-remote-host 
    HostkeyAlgorithms +ssh-dss 

Khả năng khác là sử dụng biến môi trường GIT_SSH để xác định các tùy chọn này:

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://[email protected]/path-to-repository 
+1

Bây giờ nó đã hoạt động mà không chỉ định tên máy chủ, chỉ với 'HostkeyAlgorithms + ssh-dss'. Cảm ơn. – giovannipds

+1

@giovannipds Chắc chắn nó cần phải là máy chủ từ xa mà bạn đang kết nối. @ downvoters Giải thích các downvotes sẽ được tốt đẹp. – Jakuje

+0

@Jakuje xin lỗi người đàn ông, tôi đã nhấp sai, và vì không thể thay đổi ngay lập tức, tôi không thể cập nhật câu trả lời của mình. – giovannipds

66

Bạn cũng có thể thêm -oHostKeyAlgorithms=+ssh-dss trong dòng của bạn ssh:

ssh -oHostKeyAlgorithms=+ssh-dss [email protected] 
+0

Đây là giải pháp nhanh nhất +1 vì nó cũng sửa vĩnh viễn vấn đề cho máy chủ đó. Một đề xuất nữa cho thời gian dài là nếu có thể hệ thống máy chủ nên có SSH daemon của nó được nâng cấp khi nó xuất hiện DSS nó không được coi là rất an toàn nữa. –

15

Đối với tôi đây làm việc: (thêm vào .ssh\config)

Host * 
HostkeyAlgorithms +ssh-dss 
PubkeyAcceptedKeyTypes +ssh-dss 
+0

Tùy chọn thứ hai không liên quan đến vấn đề và tùy chọn đầu tiên đã được đề cập trong câu trả lời của tôi. – Jakuje

+0

Máy chủ lưu trữ của bạn không hoạt động đối với tôi, miễn là máy chủ lưu trữ của bạn là tên của máy chủ lưu trữ, tôi đang chạy lệnh ssh từ (máy khách). Nhưng Host * đã làm việc cho tôi. – Krischu

+2

@Krischu no, 'yuor-host' là máy chủ bạn đang chạy' ssh'. Đặt mặc định không an toàn cho tất cả máy chủ luôn là ý tưởng tồi. – Jakuje

8

Nếu bạn giống tôi và không muốn tạo hệ thống lỗ hổng bảo mật hoặc người dùng này, bạn có thể thêm tùy chọn cấu hình vào bất kỳ repo git nào bằng cách chạy lệnh này trong các repos đó. (lưu ý chỉ hoạt động với phiên bản git> = 2.10, phát hành 2016-09-04)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss' 

Điều này chỉ hoạt động sau khi lệnh được thiết lập. Nếu bạn không thoải mái khi thêm từ xa theo cách thủ công (và chỉ muốn sao chép) thì bạn có thể chạy bản sao như sau:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://[email protected]/path-to-repository 

rồi chạy lệnh đầu tiên để làm cho nó vĩnh viễn.

Nếu bạn không có mới nhất, và vẫn muốn giữ cho lỗ như địa phương càng tốt tôi khuyên bạn nên đặt

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' 

trong một tập tin ở đâu đó, nói git_ssh_allow_dsa_keys.sh, và source ing nó khi cần thiết.

-2

Bạn có thể làm theo cách tiếp cận ở trên hoặc điều này

Tạo tệp cấu hình trong thư mục .ssh và thêm các dòng này.

host xxx.xxx 
Hostname xxx.xxx 
IdentityFile ~/.ssh/id_rsa 
User xxx 
KexAlgorithms +diffie-hellman-group1-sha1 
+0

Đó là giải quyết vấn đề hoàn toàn khác nhau. – Jakuje

1

Tôi muốn cộng tác một chút với giải pháp cho phía máy chủ. Vì vậy, máy chủ đang nói nó không hỗ trợ DSA, điều này là do các openssh client does not activate it by default:

OpenSSH 7.0 and greater similarly disable the ssh-dss (DSA) public key algorithm. It too is weak and we recommend against its use.

Vì vậy, để khắc phục điều này này ở phía máy chủ tôi nên kích hoạt các thuật toán chính khác như RSA o ECDSA. Tôi chỉ có vấn đề này với một máy chủ trong một lan. Tôi đề nghị như sau:

Cập nhật các openssh:

yum update openssh-server 

Merge cấu hình mới trong sshd_config nếu có một sshd_config.rpmnew.

Xác minh có các khóa máy chủ tại/etc/ssh /. Nếu không tạo mới, hãy xem man ssh-keygen.

$ ll /etc/ssh/ 
total 580 
-rw-r--r--. 1 root root  553185 Mar 3 2017 moduli 
-rw-r--r--. 1 root root  1874 Mar 3 2017 ssh_config 
drwxr-xr-x. 2 root root  4096 Apr 17 17:56 ssh_config.d 
-rw-------. 1 root root  3887 Mar 3 2017 sshd_config 
-rw-r-----. 1 root ssh_keys 227 Aug 30 15:33 ssh_host_ecdsa_key 
-rw-r--r--. 1 root root  162 Aug 30 15:33 ssh_host_ecdsa_key.pub 
-rw-r-----. 1 root ssh_keys 387 Aug 30 15:33 ssh_host_ed25519_key 
-rw-r--r--. 1 root root   82 Aug 30 15:33 ssh_host_ed25519_key.pub 
-rw-r-----. 1 root ssh_keys 1675 Aug 30 15:33 ssh_host_rsa_key 
-rw-r--r--. 1 root root  382 Aug 30 15:33 ssh_host_rsa_key.pub 

Xác minh trong/etc/ssh/sshd_config cấu hình HostKey. Nó sẽ cho phép cấu hình RSA và ECDSA. (Nếu tất cả chúng được nhận xét theo mặc định thì nó cũng cho phép quá RSA, xem trong man sshd_config một phần của HostKey).

# HostKey for protocol version 1 
#HostKey /etc/ssh/ssh_host_key 
# HostKeys for protocol version 2 
HostKey /etc/ssh/ssh_host_rsa_key 
#HostKey /etc/ssh/ssh_host_dsa_key 
HostKey /etc/ssh/ssh_host_ecdsa_key 
HostKey /etc/ssh/ssh_host_ed25519_key 

Đối với các mặt hàng khác, tạo ra một chìa khóa cho ssh (không phải là một DSA thích trong câu hỏi) bằng cách chỉ làm điều này:

ssh-keygen 

Sau này, bởi vì có những lựa chọn hơn ssh-dss (DSA) client openssh (> = v7) nên kết nối với RSA hoặc thuật toán tốt hơn.

Here another good article.

Đây là câu hỏi đầu tiên của tôi đã trả lời, Tôi hoan nghênh gợi ý: D.

Các vấn đề liên quan