Sự cố kết nối SSH với xác minh khóa Host Host không thành công


179

Tôi có thể kết nối với một máy Ubuntu khác trong mạng LAN của mình thông qua SSH. Trên cả hai PC sau đó, tôi đã cài đặt máy chủ openssh nhưng từ một máy tính Ubuntu khác, tôi không thể kết nối với PC của mình thông qua SSH và tôi đã gặp lỗi này:

Xác minh khóa máy chủ không thành công ...


1
Bạn sử dụng tên máy chủ hoặc địa chỉ IP?
Thorbjørn Ravn Andersen

Không giống nhau nhưng tôi gặp lỗi tương tự nhưng do một vấn đề khác: serverfault.com/questions/494916/ Lời
zengr

Đây không phải là một vấn đề cụ thể của Ubuntu. Có thể xảy ra với bất kỳ sshtừ dòng lệnh.
MarkHu

Câu trả lời:


216

"Xác minh khóa máy chủ không thành công" có nghĩa là khóa máy chủ của máy chủ từ xa đã bị thay đổi.

SSH lưu trữ các khóa máy chủ của các máy chủ từ xa trong ~/.ssh/known_hosts. Bạn có thể chỉnh sửa tệp văn bản đó theo cách thủ công và xóa khóa cũ (bạn có thể thấy số dòng trong thông báo lỗi) hoặc sử dụng

ssh-keygen -R hostname

Từ trang nam :

Tên máy chủ -R
Xóa tất cả các khóa thuộc tên máy chủ khỏi tệp đã biết. Tùy chọn này rất hữu ích để xóa các máy chủ băm.

(mà tôi đã học được từ câu trả lời là Có thể xóa khóa máy chủ cụ thể khỏi tệp know_hosts của SSH không? ).


4
Điều đó cũng có nghĩa là bạn chỉ đơn giản là không có khóa máy chủ của máy chủ từ xa. Ví dụ: nếu tôi rm ~/.ssh/*, sau đó ssh -o BatchMode=yes root@somewhere, nếu không có gì khác tôi sẽ nhận được Host key verification failed. Không quan trọng nếu bạn luôn tương tác, nhưng có liên quan đến các tập lệnh gặp lỗi tương tự.
Ron Burk

Không ngạc nhiên, ssh-keygen -R example.net:7999năng suất Host example.net:7999 not found in known_hosts.
alex

Tôi xóa known_hoststập tin và ssh một lần nữa. Nó đã làm việc.
ParisaN

tập tin ~/.ssh/known_hostskhông thể đọc được
João Pimentel Ferreira

128

Nếu bạn đang chạy trong một số tình huống từ xa / tập lệnh nhất định khi bạn thiếu quyền truy cập tương tác vào dấu nhắc để thêm, hãy làm việc xung quanh nó như sau:

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime

Cảnh báo: Đã thêm vĩnh viễn 'Something.example.com, 10.11.12.13' (RSA) vào danh sách các máy chủ đã biết.


6
+1, đây là một giải pháp xấu, nhưng trong một số trường hợp các quy trình giám sát tự động hoạt động với các thiết bị được kết nối ip, đây là một giải pháp đơn giản và có thể chấp nhận được.
Ninsuo

11
+1 Ví dụ, đối với các vụ hành quyết của Jenkins, đây là một giải pháp tốt. Cảm ơn
Lobo

5
@Lobo không thể đồng ý nhiều hơn, tôi đang sử dụng nó cho jenkins, điều này thật tuyệtsh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
nguyện

Cứu cuộc đời tôi. Giải pháp cứu người.
dùng1735921

10

Ngoài ra đôi khi có tình huống khi bạn đang làm việc trên bàn điều khiển nối tiếp, sau đó kiểm tra lệnh trên trong chế độ dài dòng -vsẽ cho thấy bạn /dev/ttykhông tồn tại, trong khi đó.

ssh -v user@hostname

Trong trường hợp trên, chỉ cần loại bỏ /dev/ttyvà tạo một liên kết tượng trưng /dev/ttyS0đến /dev/tty.

rm /dev/tty
ln -s /dev/ttyS0 /dev/tty

Thay vào đó, hãy thêm id_rsa.pubvào vị trí từ xa, vì vậy mật khẩu không được nhắc và bạn có quyền truy cập đăng nhập.


6
+1 để tư vấn sử dụng tham số -v; điều này có thể giúp rất nhiều khi gỡ lỗi các vấn đề ssh.
daniel kullmann

8

Trong trường hợp của tôi, điều này được gây ra bởi một vấn đề udev - không có /dev/ttynút thiết bị. Giải pháp cho tôi chỉ là:

sudo mknod -m 666 /dev/tty c 5 0

6

Trên thiết bị đầu cuối:

ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime

Thông báo sau hoặc tương tự sẽ xuất hiện:

Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
 00:47:37 up 3 min,  0 users,  load average: 0.00, 0.00, 0.00

Sau đó, kết nối với EC2 của bạn như bình thường:

ssh -i YourPublickey.pem user@example.com

Tôi hiểu command-line line 0: Bad yes/no/ask argument.vì bạn đã sử dụng sai 'Không' thay vì 'không' làm đối số choStrictHostKeyChecking
Axel Bregnsbo

3

Chà, đơn giản là vì ubfox thứ hai yêu cầu kết nối bằng khóa chứ không phải mật khẩu.

Tôi đề nghị bạn sử dụng sudo dpkg-reconfigure openssh-servertrên máy tính của bạn, và sau đó nó sẽ hoạt động đúng. Nó sẽ thiết lập lại cấu hình cho openssh và sẽ quay trở lại xác thực mật khẩu mặc định.

Khả năng thứ hai là đã có một khóa cho ubfox khác trong PC của bạn và nó đã thay đổi do đó không được nhận ra nữa. Trong trường hợp này, bạn sẽ phải chỉnh sửa tệp .ssh/authorized_keysđể xóa dòng có vấn đề xác định Ubuntu của bạn.


3

Đây là một chủ đề cũ và tôi chỉ chạy qua câu trả lời này, tôi sẽ chỉ thêm những gì tôi đã làm để giải quyết điều này.

ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME

Tôi chỉ nhìn vào thông báo lỗi mà nó đã ném vào tôi và nó nói sẽ chạy lệnh đó để xóa nó khỏi danh sách máy chủ lưu trữ. Sau đó tôi đã làm như sau:

ssh-copy-id HOSTNAME

Hơn tôi làm theo lời nhắc từ đó cho đến khi tôi có thể ssh vào máy chủ.


Theo lệnh này, tôi nhận được đề xuất trong ubfox 12.4.
MaNKuR

2

Nó có nghĩa là khóa máy chủ từ xa của bạn đã được thay đổi (Có thể là thay đổi mật khẩu máy chủ),

Thiết bị đầu cuối của bạn đề nghị thực hiện lệnh này với tư cách là người dùng root

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231

Bạn phải xóa tên máy chủ đó khỏi danh sách máy chủ trên máy chủ / máy chủ của bạn. Sao chép lệnh được đề xuất đó và thực thi như một người dùng root.

$ sudo su                                                            // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231   // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                               // Exist from root user

$ sudo ssh root@www.website.net -p 4231                              // Try again

Hy vọng điều này làm việc.


1

Bạn nên thay đổi khóa của mình theo cách này: Từ lỗi đã cho, hãy tìm khóa máy chủ nào đã thay đổi, ví dụ: Xúc phạm khóa ECDSA trong /Users/user-name/.ssh/ Unknown_hosts giáp cho biết khóa thứ 5 đã thay đổi, vì vậy hãy thực hiện điều này:

sed -i '5d' ~/.ssh/known_hosts

Lưu ý: bạn phải root hoặc có đặc quyền cho sudo.


Không, trừ khi bạn đang làm điều đó cho người khác, nó không yêu cầu root hay sudo. Bạn đang chỉnh sửa tập tin trong thư mục nhà của bạn. Thứ hai: để lệnh hoạt động, nó yêu cầu GNU sed.
techraf 13/03/2016

Có thể bạn đúng nhưng tôi đã cố gắng chuyển từ Mac OSX sang máy chủ Ubuntu và tôi phải làm điều đó. Nhân tiện cảm ơn bạn đã bình luận của bạn.
Amir.AG

1

bạn phải đặt khóa rsa của máy chủ đích vào máy chủ nguồn /home/user/.ssh/known_hostsbằng cách chạy mã này trên mục tiêu

ssh-keyscan -t rsa @targethost

1

Có thể bạn chỉ cần nhập "có" khi ssh xác nhận bạn muốn tiếp tục kết nối.

Giống như dưới đây.

The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':

Sau đó nhập mật khẩu của bạn.

Vui lòng chú ý đến "Bạn có chắc chắn muốn tiếp tục kết nối (có / không) không? ". Bạn phải nhập có, không nhập.


1

Ngoài việc vô hiệu hóa kiểm tra khóa máy chủ, bạn cũng có thể kết nối bằng cách nhập:

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>

0

pico ~/.ssh/known_hosts và xóa tất cả các dòng, sau khi chỉ cần kết nối lại và bạn sẽ nhận được một khóa mới.


6
Đây là một giải pháp nguy hiểm, bởi vì bạn sẽ loại bỏ TẤT CẢ các khóa máy chủ của mình. Các giải pháp được chấp nhận, ssh-keygen -R hostnamelà tốt hơn.
msanford

0

Giải pháp của tôi xuất phát từ bài đăng trên blog này: Đàm phán thuật toán không thành công cho SSH Secure Shell Client

Bạn cần sửa đổi tập tin như sau:

sudo nano /etc/ssh/sshd_config

Và sau đó thêm vào như sau:

# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1

Về cơ bản, bạn đã thử các giải pháp khác nhau cho đến khi bạn tìm thấy một giải pháp có thể giải quyết vấn đề của bạn. Nếu các giải pháp trên không hoạt động, vui lòng thử giải pháp này. Nếu cái này không hoạt động tốt, vui lòng thử cái khác.


0

Chỉ cần thực hiện "sudo vi /var/root/.ssh/ Unknown_hosts" và xóa dòng, giữ một khóa cho máy chủ bạn đang cố gắng kết nối và kết nối lại.

Tôi không biết về tình huống cụ thể của bạn, nhưng rất có thể lỗi này xuất hiện cùng với một thông báo như thế này:

my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.

Nếu bạn đọc nhật ký cẩn thận hơn, bạn sẽ thấy rằng khóa bạn nhận được từ máy chủ đang xung đột với khóa bạn đã có - trong trường hợp này là trên dòng 74 của tệp know_hosts (Vi phạm khóa ECDSA trong / var / root / .ssh / know_hosts: 74). Xóa dòng khỏi know_hosts, lưu thay đổi và kết nối lại.


-1
chmod 666 /dev/tty 

vẫn là một giải pháp tty khác - đôi khi, tệp thiết bị này có quyền sai.

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.