Tạm thời bỏ qua tệp `~ / .ssh / know_hosts` của tôi?


48

Có cách nào để tạm thời bỏ qua ~/.ssh/known_hoststập tin của tôi ?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

GHI CHÚ:

.. bởi một vài câu trả lời / nhận xét tôi nhận ra rằng câu hỏi của tôi hơi sai lệch, vì vậy nó là hành vi được mong đợi), vì vậy nó là bình thường (trong trường hợp của tôi) có một lý do hợp lệ đằng sau nó về lý do tại sao tôi muốn xem "bỏ qua")


9
Bạn đang hỏi sai câu hỏi. Bạn không nên "phớt lờ" vấn đề; bạn nên tìm hiểu những gì đang xảy ra và giải quyết nó.
Michael Hampton

9
Tôi không thể nói cho người dùng, nhưng một ví dụ sẽ là tình huống bạn đang phát triển quy trình cài đặt tự động (chẳng hạn như khởi động), trong đó quy trình lặp của bạn bao gồm xây dựng, kết nối, kiểm tra, sửa đổi quy trình xây dựng và xây dựng lại từ gãi nhiều lần.
Goladus

10
@MichaelHampton - Tôi nhận được điều này mọi lúc khi VMware và VirtualBox tái chế địa chỉ IP cho khách. Đối với tôi, đó là câu hỏi chính xác :)

1
FWIW Tôi tiếp tục tìm kiếm câu trả lời này vì tôi có một hệ thống trong mạng LAN nơi tôi sử dụng một dropbear (với một khóa máy chủ khác) để nhập mật khẩu mã hóa đĩa trong khi khởi động.
Zulan

1
@jww Đây là câu hỏi / giải pháp sai cho kịch bản của bạn. Thay vào đó, bạn nên cấu hình SSH để bỏ qua địa chỉ IP nhưng vẫn kiểm tra khóa máy chủ. Xem ví dụ ở đây
Jon Bentley

Câu trả lời:


56

Bạn có thể sử dụng ssh -o StrictHostKeyChecking=nođể tắt kiểm tra known_hoststrong giây lát. Nhưng tôi khuyên bạn nên chống lại điều này. Bạn thực sự nên kiểm tra tại sao khóa máy chủ đã thay đổi.

Một tùy chọn khác là thêm một mục cụ thể vào ~/.ssh/configmáy chủ của bạn trong câu hỏi. Đây có thể là cách tiếp cận hợp lệ nếu bạn có một máy chủ nhất định tạo khóa máy chủ mới mỗi lần khởi động lại và nó được khởi động lại vì một lý do hợp lệ nhiều lần trong ngày.

Host <your problematic host>
  StrictHostKeyChecking no

đó là hành vi được mong đợi) vì vậy nó là bình thường (trong trường hợp của tôi)
alexus

1
@alexus Nếu đó là "mong đợi", thì bạn có thể áp dụng tùy chọn cho một tên máy chủ / IP cụ thể mà bạn mong đợi nó sẽ xảy ra.
chrylis -on strike- 7/12/13

1
@alexus Và hãy nhớ rằng nếu bạn làm điều này, bạn sẽ mất khá nhiều sự bảo vệ mà ssh cung cấp. Bạn cũng có thể đang sử dụng telnet, vì nó sẽ không quan trọng đối với ai đó để MITM bạn và nắm bắt tất cả lưu lượng truy cập của bạn.
Michael Hampton

1
Điều này không còn hoạt động (ít nhất là đối với OpenSSH_5.3p1)
kéo dài

-o StrictHostKeyChecking=noloại bỏ khả năng đăng nhập bằng mật khẩu. Không phải thiếu cờ cho điều này có đi ngược lại với các nguyên tắc unix cho phép người dùng ép buộc hành vi không? Tôi hiện đang cố gắng đăng nhập vào một máy cục bộ bằng IP cục bộ. Khóa máy chủ thay đổi vì tôi định dạng lại máy nói. Tất cả mọi thứ ở đây có ý nghĩa và không có gì là rủi ro bảo mật trong các trường hợp.
Wowfunhappy

31

Để hoàn toàn bỏ qua tệp máy chủ đã biết của bạn trong môi trường POSIX, hãy đặt GlobalKnownHostsFileUserKnownHostsFilecác tùy chọn thành /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

Đặt StrictHostKeyChecking=notùy chọn sẽ cho phép bạn kết nối nhưng SSH vẫn sẽ hiển thị cảnh báo :

ssh -o StrictHostKeyChecking=no user@host

Như những người khác đã lưu ý, có lẽ tốt hơn để giải quyết vấn đề cơ bản. Bạn có thể xem xét xác thực chứng chỉ SSH để xác minh máy chủ, ví dụ.


2
Đây có thể là một câu trả lời tốt hơn so với câu trả lời cao nhất hiện tại vì nó cho phép sử dụng xác thực mật khẩu sẽ bị vô hiệu hóa (tất nhiên, bạn nên hiểu chính xác những gì bạn đang làm trước khi nhập mật khẩu của bạn ...)
VZ.

Tôi có một chút bối rối ở đây: bạn có nên sử dụng -o StrictHostKeyChecking=no thêm vào các -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nulltùy chọn không? - cho câu trả lời cuối cùng về : ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Gabriel Staples

Viết liên quan Tôi tìm thấy trực tuyến: shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples

5

Nếu bạn đã cài đặt lại máy chủ và do đó, Nhận dạng đã thay đổi, bạn chỉ cần xóa dòng 155 được chỉ định từ đó /Users/alexus/.ssh/known_hostsvà tiếp tục.

Nếu bạn chuyển đổi giữa các mạng riêng khác nhau, bạn nên sử dụng tên máy chủ để kết nối thay thế, vì máy khách ssh cũng sẽ lưu các khóa tùy thuộc vào tên máy chủ. Thêm một cái gì đó như thế này vào /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

và sau đó sử dụng ssh server1khi được kết nối với mạng con 1 và ssh server2khi được kết nối với mạng con2. Bằng cách này, cả hai máy chủ có thể có các con chủ khác nhau.


Điều gì nếu bạn chuyển đổi giữa hai mạng riêng và kết nối với hai IP giống nhau?
alexus

1
Tôi đã chỉnh sửa câu trả lời của mình.
etagenklo

2
@alexus Sau đó, bạn cần IPv6 :) Nhưng đó sẽ là thông tin hữu ích trong câu hỏi ban đầu của bạn.
Michael Hampton

2

-o StrictHostKeyChecking=no chỉ hoạt động nếu máy chủ chưa xuất hiện trong tệp know_hosts.

Tôi nghĩ rằng nó sạch hơn (không có cảnh báo), nếu bạn mong muốn khóa máy chủ thay đổi có thể do nhân bản vm, để thực thi bỏ qua các loại máy chủ như thế này:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"

2

Một số người nói điều đó không đúng, bạn không nên làm điều này, v.v., nhưng tôi cũng cần điều này để kiểm tra một vài thiết bị nhúng nhiều lần. Bạn cần phải vô hiệu hóa StrictHostKeyChecking=no, điều này đúng, nhưng cũng thiết lập lại tập tin máy chủ đã biết /dev/null. Đây là một ví dụ với autologin và pstrên thiết bị từ xa.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'

-2

Đăng nhập vào tất cả các máy chủ của bạn, (và nếu RedHat) rm -f /etc/ssh/ssh_host_*và sau đó khởi động lại SSHD.

Điều này sẽ tạo các khóa máy chủ SSH mới mà không cần bỏ qua.

Tôi chỉ có thể nghĩ về một trường hợp trong đó các khóa SSH được sao chép trên nhiều máy chủ không chỉ mong muốn mà còn không đưa ra bất kỳ cảnh báo nào. Bội số của một bản ghi A. Tất cả các máy chủ lưu trữ có bản ghi A đều có cùng khóa.


6
Câu trả lời này không chính xác. Dấu vân tay là cục bộ trên máy khách.
89c3b1b8-b1ae-11e6-b842-48d705
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.