Làm cách nào tôi có thể buộc SSH cung cấp khóa RSA thay vì ECDSA?


16

Lần đầu tiên truy cập vào máy chủ, làm cách nào tôi có thể buộc SSH cung cấp cho tôi khóa RSA và tự động lưu trữ nếu người dùng chấp thuận?

Hiện tại nó đang cung cấp cho tôi khóa ECDSA. Vì tôi đã biết khóa RSA, tôi muốn thấy khóa RSA được trình bày tại thời điểm này.

Tôi đã thử:

ssh -o RSAAuthentication=yes user@server

Thật không may, điều này mang lại cho tôi một khóa ECDSA và Are you sure you want to continue connecting (yes/no)?tin nhắn.


Tôi đã gặp một tình huống tương tự. Máy chủ A. Máy khách B. Trên B: ssh A trước tiên sẽ hỏi bạn về khóa. Trên Cleint C: ssh A trước tiên sẽ hỏi bạn về passwrd, sau khi thất bại trong nỗ lực để Client C sử dụng khóa ECDSA, tôi đã thấy điều này trên nhật ký của A. Nếu tôi tải trước khóa rsa trên C, thì ssh A sẽ kết nối vui vẻ . Làm cách nào để ngăn C sử dụng khóa ECDSA như lần thử đầu tiên?
Kemin Zhou

Câu trả lời:


14

Bằng cách loại bỏ các thuật toán ECDSA khỏi HostKeyAlgorithmsbiến cấu hình.

ssh -o HostKeyAlgorithms=ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss user@server

Tôi chỉ đơn giản là xóa tất cả các thuật toán ECDSA khỏi danh sách mặc định .

Tất nhiên, bạn có thể đặt nó vào máy của bạn .ssh/config:

Host: server
    HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss

Đối với OpenSSL, 1) không có dấu hai chấm sau máy chủ và 2) danh sách mặc định dường như đã thay đổi kể từ khi bạn đăng bài này. Hãy thử HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-rsathay thế.
chăn bò

6

Không sử dụng RSA vì ECDSA là mặc định mới.

Trên máy chủ làm điều này: ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub và ghi lại số đó.

Trên máy khách, bạn có thể SSH đến máy chủ và nếu và khi bạn thấy số đó, bạn có thể trả lời nhanh chóng Are you sure you want to continue connecting (yes/no)?. Sau đó, khóa ECDSA sẽ được ghi lại trên máy khách để sử dụng trong tương lai.


3
vâng nhưng nếu tôi có một ứng dụng cũ cần RSA để duy trì khả năng tương thích cho đến khi có quyết định kinh doanh để cập nhật lên ecdsa thì sao?
nhiệt tình

@RobertSiemer chỉ áp phích câu hỏi ban đầu có thể thay đổi câu trả lời được chấp nhận. Tôi không thể làm như vậy.
nhiệt tình

1
H2ONaCl: vui lòng thay đổi câu trả lời được chấp nhận của bạn. Điều này không làm những gì bạn yêu cầu. @enthusiasticgeek xin lỗi, mixup.
Robert Siemer 16/2/2016

Mặc định (kháng cáo lên chính quyền) và mới (kháng cáo về tính mới) không nhất thiết có nghĩa là tốt hơn. RSA vẫn được coi là mạnh ... chỉ cần tăng bit lên 4096 nếu bạn muốn có thêm sức mạnh (2048 có thể bị lỗi thời). Và nếu bạn muốn có một thuật toán EC tốt, hãy sử dụng ed25519. ECDSA hút bởi vì nó sử dụng các đường cong NIST yếu thậm chí có thể là cửa hậu; điều này đã được một vấn đề nổi tiếng trong một thời gian. Vì vậy, để hỗ trợ kế thừa, kích hoạt RSA và để có một lý tưởng lý tưởng, hãy sử dụng ed25519 ... luôn vô hiệu hóa DSA đã lỗi thời (một lý do chính là khóa 1024 bit cố định) và cũng vô hiệu hóa ECDSA. Hãy thử ssh-aud để biết thêm.
Peter

5

Có, OK chuyển sang ECDSA sớm, nhưng trong lúc này hãy thử điều này:

ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user@example.com

Điều này mang lại "Tùy chọn cấu hình xấu: vân tay" trên hệ thống của tôi (OpenSSH_6.6.1p1).
Soren Bjornstad

1
@SorenBjornstad, FingerprintHashtùy chọn là không cần thiết, chỉ cần bỏ toàn bộ phần đó.
Lucas

2

Tôi vừa thêm dòng này

HostKeyAlgorithms ssh-rsa

đến

/etc/ssh/sshd_conf

và nó hoạt động tốt trong phiên bản này.

OpenSSH_7.7p2 ubuntu-4ubuntu2.2

1

Chỉ để cải thiện câu trả lời của tumbleweed có liên kết chết trong đó để tìm danh sách thuật toán cũ.

Đầu tiên quyết định một danh sách các thuật toán. Để tìm danh sách cũ, sử dụng ssh -vv:

ssh -vv somehost

Và tìm kiếm 2 dòng như "thuật toán khóa máy chủ: ..." trong đó dòng đầu tiên xuất hiện là ưu đãi của máy chủ và thứ 2 là của máy khách. Hoặc để tự động chọn ra 2 dòng đó, hãy thử điều này (và để thoát nhấn ctrl + d):

ssh -vv somehost 2>&1 | grep "host key algorithms:"

Bây giờ hãy lọc nó xuống ... bạn nên xóa tất cả các dss / dsa vì chúng đã lỗi thời và bạn cũng muốn xóa ecdsa (như tôi), vì vậy, ví dụ nếu bạn có:

ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Bạn nên kết thúc với:

ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Bây giờ chỉnh sửa cấu hình của bạn. Đối với cấu hình của riêng bạn:

vim ~/.ssh/config

Đối với cấu hình toàn hệ thống:

sudo vim /etc/ssh/ssh_config

Thêm một dòng mới, trên toàn cầu:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

hoặc cho một máy chủ cụ thể (không lý tưởng cho cấu hình máy chủ rộng):

Host somehost
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Thay vì danh sách tôi đã nhập, dán danh sách bạn nhận được từ ssh -vvđầu ra, không bao gồm phần "thuật toán khóa máy chủ:".


0

Một số điểm khó hiểu là có thể loại bỏ các thuật toán chính khỏi các mặc định hiện có - Các khóa cấp cao nhất là các khóa RSA-sha2 / 256/512 và ed25519 mới để bảo mật tốt nhất bằng cách sử dụng ssh-keygen -t ras -a -b 4096 -a 113 để gen. Hỗ trợ kế thừa rõ ràng là đang đọc tin tức ssh rằng ssh1 sẽ hoàn toàn biến mất - các khóa tối đa 45 bit và 96 bit của nó cũng bị loại bỏ cũng bị loại bỏ. Nó được sửa trên 128/1024 bit max có thể hack được. (sở hữu NSA đã làm điều đó và khập khiễng / xin lỗi vì mã gỡ lỗi khiến người ta nghi ngờ rất nhiều về việc đặt tên cho nó), vì vậy tất cả các cấu trúc khóa RSA an toàn phải trả chi phí cao phải được làm lại để hỗ trợ và duy trì các tiêu chuẩn cao hơn. đặt những khóa nào bạn muốn sử dụng như được mô tả trong / etc / ssh / sshd_config hãy thử thực hiện 2 khóa auth 3 khóa cũng hoạt động, ví dụ: sshd_config "Khóa xác thực, khóa công khai, khóa công khai, khóa công khai" - đảm bảo danh sách ssh -Q kex khớp với cả máy chủ A và B hoặc máy tính để bàn vì ví dụ sở hữu khác biệt trên đầu ra của chúng - và đảm bảo các thuật toán thở ra cùng khóa khớp với nhau. Khóa ecdsa mới hơn trong sản xuất cũng không được sử dụng. hoặc get - keyexchange từ chối truy cập một phần thông điệp an toàn. Rất nhiều thông tin tốt chỉ cần kiên nhẫn để tìm kiếm nó.


2
Bạn có thể thử phá vỡ bức tường văn bản này để dễ theo dõi hơn không? Vui lòng sử dụng hướng dẫn định dạng và định dạng mã và nội dung tệp văn bản dưới dạng mã và nếu điều đó sẽ làm cho mọi thứ rõ ràng hơn, hãy đặt chúng trên các dòng riêng của chúng. Tôi sẽ vui vẻ chỉnh sửa câu trả lời của bạn nếu tôi có thể làm theo, nhưng tôi không thể.
Zanna

-5

Hoặc, nếu bạn khăng khăng có cách tiếp cận khóa RSA, bạn có thể nhập ssh-keygen -t rsavào máy chủ mà bạn định SSH.

Điều đó sẽ tạo khóa công khai và khóa riêng RSA trong '~ / .ssh / id_rsa'. Bây giờ tất cả những gì bạn cần làm là sao chép khóa công khai bên dưới$HOME/.ssh/authorized_keys tất cả các máy mà bạn dự định ssh sang máy mà bạn đã tạo khóa RSA.

Và sau đó ngồi lại và thư giãn!


1
Bạn nhận ra rằng câu hỏi không phải là về khóa phía máy khách mà là về khóa máy chủ?
0xC0000022L
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.