Git nói Cảnh báo của Cảnh sát: Đã thêm vĩnh viễn vào danh sách các máy chủ đã biết


192

Mỗi lần tôi sử dụng git để tương tác với một điều khiển từ xa, chẳng hạn như khi kéo hoặc đẩy, tôi sẽ hiển thị thông báo sau:

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

Làm thế nào tôi có thể ngăn thông báo gây phiền nhiễu này hiển thị? Nó chỉ là một phiền toái, mọi thứ đều hoạt động bình thường.


1
Bạn có thực sự có nghĩa là mọi lúc? Là nó cung cấp cho bạn một dấu nhắc của các hình thức The authenticity of host '...' can't be established. RSA key fingerprint is .... Are you sure you want to continue connecting (yes/no)?, hoặc bạn đã ngăn chặn điều đó? Nếu có, nó có cùng dấu vân tay mỗi lần không? Nếu không, điều đó thực sự đáng sợ . Tùy chọn ít đáng sợ hơn là bằng cách nào đó nó không thực sự quản lý để ghi vào tệp máy chủ, vì vậy nó sẽ thử lại mỗi lần. Có một cái nhìn ~/.ssh/known_hosts?
Cascabel

1
Đúng. <i> Mỗi </ i> thời gian. Tuy nhiên, tôi không thấy thông báo "Bạn có chắc ..." - có lẽ tôi đã chặn nó.
Donald Taylor

Là máy chủ được liệt kê trong ~/.ssh/known_hosts? (Có được liệt kê 5000 lần không?) Có ~/.ssh/configtồn tại / chứa bất cứ thứ gì (đặc biệt là giá trị cho StrictHostKeyChecking) không?
Cascabel

Máy chủ được liệt kê trong tệp đó một lần và đó là mục duy nhất.
Donald Taylor

2
Tôi đoán nội dung known_hoststập tin của bạn là xấu. Nó phải là khóa máy chủ, trên một dòng dài khủng khiếp. Nếu bạn chỉ có tên máy chủ ở đó (ví dụ) thì nó sẽ không hoạt động. Tôi khuyên bạn nên xóa tệp này (nếu thực sự nó chỉ chứa thông tin cho máy chủ duy nhất này) và cho phép SSH tạo tệp này vào lần tiếp theo bạn kết nối. Nó nên im lặng sau đó.
tripleee

Câu trả lời:


240

Giải pháp: tạo một ~/.ssh/configtệp và chèn dòng:

UserKnownHostsFile ~/.ssh/known_hosts

Sau đó, bạn sẽ thấy tin nhắn vào lần tiếp theo bạn truy cập Github, nhưng sau đó bạn sẽ không thấy tin nhắn đó nữa vì máy chủ được thêm vào known_hosts tệp. Điều này khắc phục vấn đề, thay vì chỉ ẩn thông điệp tường trình.

Vấn đề này đã làm tôi khó chịu trong một thời gian. Sự cố xảy ra do ứng dụng khách OpenSSH được biên dịch cho Windows không kiểm tra tệp know_hosts trong~/.ssh/known_hosts

ssh -vvvvvvvvvvvvvvvvvvv git@github.com

debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.

9
Vâng, tôi không coi việc ngăn chặn các cảnh báo hoặc lỗi là một giải pháp thích hợp cho một vấn đề. ;)
Jeremiah Gowdy 26/03/13

1
Gần đây, tôi gặp phải vấn đề tương tự trên máy ubfox của mình. Nó bắt đầu hành xử theo cách này sau khi tôi sử dụng một khóa khác (từ mặc định của tôi ~/.ssh/id_rsa) để kết nối với máy chủ. Như @JeremiahGowdy đã đề cập, tôi có debug3: load_hostkeys: loading entries for host "172.16.3.101" from file "/dev/null". Tại sao SSH bắt đầu sử dụng /dev/nullnhư know_host sau khi tôi thay đổi khóa?
m-ric

6
Hoạt động tuyệt vời! Cuối cùng cảnh báo ngu ngốc dừng lại. Btw trên Windows, ~trong ~/.ssh/configlà thư mục nhà của người dùng. Để mở dễ dàng, nhấn Win-R , nhập cmd Enter . Dấu nhắc lệnh đã được mở trong thư mục nhà của bạn. Gõ cd .ssh Enter , và sau đó start . Enter để mở thư mục trong Windows Explorer. Sau đó, bạn có thể tạo tệp cấu hình trong Notepad (không có phần mở rộng .txt khi lưu). (Người dùng Pro có thể lặp lại trực tiếp một tệp mới trong chính dấu nhắc lệnh ;)). Chạy lệnh git liên quan đến điều khiển từ xa hai lần (như git fetch) và bạn đã hoàn thành.
ADTC

1
Tại sao bạn có 20 v cho ssh?
bubakazouba

3
@bubakazouba Càng nhiều v, nhật ký càng dài, hãy kiểm tra các tài liệu cho điều đó. Ba sẽ đủ, hai mươi là quá mức cần thiết: D
Petr Mánek

90

Thêm dòng sau vào tệp cấu hình ssh của bạn ($ HOME / .ssh / config):

LogLevel=quiet

Nếu chạy ssh từ dòng lệnh, hãy thêm tùy chọn sau vào chuỗi lệnh:

-o LogLevel=quiet

Ví dụ: các bản in sau đây in ra phiên bản gcc được cài đặt trên machine.example.org (và không có cảnh báo):

ssh -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -o LogLevel=quiet \
    -i identity_file \
    machine.example.org \
    gcc -dumpversion

1
Thêm "LogLevel = quiet" vào tệp "config" đã hoạt động. Cảm ơn bạn.
Donald Taylor

3
Để duy trì bảo mật, sẽ tốt hơn nếu đặt "LogLevel = quiet" bên trong phần "Máy chủ".
Joe

39
LogLevel=quietlà một ý tưởng tồi, anh ấy muốn tất cả các lỗi được hiển thị, anh ấy chỉ muốn tránh lỗi đáng ghét cụ thể này. Có lẽ bởi vì anh ta đã lừa ssh để sử dụng /dev/nulllàm known_hoststập tin, có lẽ vì anh ta muốn tắt known_hostskiểm tra dấu vân tay, nhưng không thể, vì các lớp phủ ssh không cho phép anh ta.
Elazar Leibovich

@bukzor loglevel=errorvẫn hiển thị "Kết nối với <server> đã đóng" khi kết nối bị ngắt, điều này cũng thực sự gây khó chịu cho kịch bản.
Guss

Tôi đã đánh giá thấp điều này vì nó không thực sự giải quyết được vấn đề. Nó chỉ che giấu nó.
alaboudi

60

Đặt LogLevelthành ERROR(không QUIET) trong ~/.ssh/configtệp để tránh nhìn thấy các lỗi này:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR

2
Điều này hoạt động tốt nhất trong trường hợp của tôi - hoặc bạn có thể chỉ định "-oLogLevel = ERROR" trên dòng lệnh
Brad

5

Thông báo đó là từ SSH, thông báo cho bạn rằng bạn đang kết nối với máy chủ mà bạn chưa từng kết nối trước đó. Tôi không khuyên bạn nên tắt nó đi, vì điều đó có nghĩa là bạn có thể bỏ lỡ một cảnh báo về việc thay đổi khóa máy chủ, điều này có thể cho thấy một cuộc tấn công MITM vào phiên SSH của bạn.


1
Nhưng tôi kết nối với nó 10 - 15 lần mỗi ngày và tôi vẫn nhận được cảnh báo này.
Donald Taylor

@JackB. Nhìn vào ~/.ssh/known_hostsvà xem nếu máy chủ của bạn đang ở đó.
Borealid

Là chìa khóa thay đổi vì một số lý do? Kiểm tra dấu vân tay trong tệp so với dấu vân tay được xuất bởi ssh. Ngoài ra, chế độ của thư mục .ssh của bạn có được đặt thành 0700 không?
Jason Carreiro

2
@JasonCarreiro, tôi là một cậu bé lớn ssh-keyscan.
Elazar Leibovich

4

Để chặn thông báo cảnh báo cho sshbạn, bạn có thể thêm các dòng sau vào ~/.ssh/config:

Host *
LogLevel error

Điều đó sẽ vô hiệu hóa cảnh báo nhưng không thông báo lỗi. Giống như các cài đặt khác trong ~/.ssh/configbạn có thể định cấu hình LogLeveltrên cơ sở cho mỗi máy chủ nếu bạn muốn kiểm soát tốt hơn.


2

Nó chủ yếu có nghĩa là có những thay đổi cho khóa cho máy chủ đó ~/.ssh/known_hosts đó và nó sẽ không tự động CẬP NHẬT nó. Do đó, mỗi khi bạn nhận được thông báo cảnh báo này.

Điều này thường xảy ra đối với việc kết nối với các máy ảo được tạo lại, thay đổi khóa có cùng địa chỉ IP

Giải pháp

Nếu bạn chỉ có một mục, thì bạn có thể xóa ~/.ssh/known_hosts tệp và sau lần kết nối đầu tiên, khóa đó sẽ ở đó và không có thông báo cảnh báo nào sau đó.

Nếu bạn có nhiều mục, thì bạn có thể sử dụng lệnh bên dưới để xóa

$ ssh-keygen -R <hostname>

Việc này ổn với tôi


0

Nếu bạn đang sử dụng kho lưu trữ từ GitHub, hãy xem xét sử dụng phiên bản HTTPS của URL thay vào đó, để khắc phục hoàn toàn vấn đề này:

Nhấp vào nút HTTP và sao chép URL đó thay thế

Nếu bạn sao chép kho lưu trữ của mình từ trong ứng dụng Windows GitHub, thì đây là những gì nó sử dụng cho URL từ xa. Có lẽ họ biết điều mà chúng ta không biết.


Lưu ý: Nếu bạn sử dụng xác thực khóa riêng, bạn không thể sử dụng HTTP (S).
qwertzguy

0

Tôi có cùng một câu hỏi, và tôi thấy không có một .sshtập tin nào trong tôi ~. Vì vậy, tôi chỉ cần tạo .sshthư mục theo ~đường dẫn, và vấn đề đã được giải quyết.


0

Tôi gặp vấn đề tương tự khi tôi bắt đầu sử dụng máy Windows. Trong trường hợp của tôi, đó là do thiết lập SSH của tôi không được thực hiện. Github có một tài liệu rất chính xác về thiết lập SSH. Khi đã được chăm sóc, vấn đề đã được giải quyết.

https://help.github.com/articles/checking-for-ex hiện- ssh-keys / https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it- đại lý-ssh /


0

Thêm khóa ssh

ssh-keygen -t rsa -b 4096 -C "abc@abc.com"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

tập tin cấu hình

crate ~/.ssh/config

thêm dòng dưới đây.

UserKnownHostsFile ~/.ssh/known_hosts

Sau đó thêm khóa pub và sao chép kho lưu trữ của bạn ... Xong .....


0

Tôi đã gặp phải lỗi tương tự trong Linux / Cent OS VM và đó là do IP đã thay đổi sau khi khởi động lại. Để giải quyết vấn đề này, tôi đã xác định một IP tĩnh trong mạng và thêm mục nhập đó vào tập tin / etc / hosts. Đối với IP tĩnh đề cập đến một giá trị phạm vi cao hơn một chút. Ví dụ: nếu IP hiện tại của bạn (ipconfig / ifconfig) là 192.168.0.102, lần tiếp theo sau khi khởi động lại, điều này có thể trở thành 192.168.0.103. Vì vậy, xác định IP tĩnh của bạn trong cài đặt IPV4 là 192.168.0.181 sẽ thực hiện thủ thuật.


cố gắng làm nổi bật các từ khóa và rõ ràng với định dạng nó sẽ giúp tiếp cận câu trả lời của bạn cho người khác
Agilanbu

0

Trong trường hợp của tôi, đó là do quản trị viên đã thiết lập máy chủ đặt các tùy chọn này trong ~/.ssh/config

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

Mà làm việc tốt cho hầu hết các trường hợp bằng cách không sử dụng các ~/.ssh/known_hoststập tin. Nhưng đối với repo gitlab của doanh nghiệp, mỗi lần nó đưa ra "Cảnh báo: Đã thêm vĩnh viễn ... vào danh sách các máy chủ đã biết."

Giải pháp của tôi là bình luận ra UserKnownHostsFile /dev/nulldòng, cho phép tạo ra ~/.ssh/known_hosts. Sau đó, nó đã không đưa ra bất kỳ cảnh báo nào nữa sau đó.

Bạn cũng có thể có một mục cũ / không hợp lệ trong của bạn known_hosts.

# find entry in ~/.ssh/known_hosts
ssh-keygen -F <hostname>

# delete entry in ~/.ssh/known_hosts
ssh-keygen -R <hostname>

-1

Tôi đang đưa giải pháp của tôi xuống do tiếp tục downvote.
Đó là giải pháp tốt nhất mà không thực sự hack mã nguồn của chính máy khách SSH.
Nếu ai đó quan tâm, hãy kiểm tra lịch sử chỉnh sửa.

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.