Git กล่าวว่า“ คำเตือน: เพิ่มอย่างถาวรในรายการโฮสต์ที่รู้จัก”


192

ทุกครั้งที่ฉันใช้ git เพื่อโต้ตอบกับรีโมทเช่นเมื่อดึงหรือดันฉันจะแสดงข้อความต่อไปนี้:

คำเตือน: เพิ่ม '... ' (RSA) ลงในรายการโฮสต์ที่รู้จักอย่างถาวร

ฉันจะป้องกันข้อความที่น่ารำคาญนี้ไม่ให้แสดงได้อย่างไร มันเป็นเพียงความรำคาญ - ทุกอย่างทำงานได้อย่างถูกต้อง


1
คุณหมายถึงทุกครั้งจริงๆหรือ? มันทำให้คุณพร้อมท์ของแบบฟอร์มThe authenticity of host '...' can't be established. RSA key fingerprint is .... Are you sure you want to continue connecting (yes/no)?หรือว่าคุณระงับสิ่งนั้นหรือไม่? ถ้าเป็นเช่นนั้นมันเป็นลายนิ้วมือเดียวกันทุกครั้งหรือไม่? ถ้ามันไม่ได้เป็นที่น่ากลัวจริงๆ ตัวเลือกที่น่ากลัวน้อยกว่าก็คือมันไม่ได้จัดการเขียนไฟล์ไปยังไฟล์ hosts ดังนั้นจึงลองใหม่ทุกครั้ง ได้ดู~/.ssh/known_hostsหรือไม่?
Cascabel

1
ใช่. <i> ทุก </i> เวลา อย่างไรก็ตามฉันไม่เห็นข้อความ "คุณแน่ใจนะ ... " - บางทีฉันอาจจะกดมัน
Donald Taylor

โฮสต์อยู่ในรายการ~/.ssh/known_hostsหรือไม่ (มีการระบุไว้ 5,000 ครั้งหรือไม่) ~/.ssh/configมีอยู่ / มีสิ่งใด (โดยเฉพาะค่าStrictHostKeyChecking)
Cascabel

โฮสต์มีการระบุไว้ในไฟล์นั้นหนึ่งครั้งและเป็นเพียงรายการเดียว
Donald Taylor

2
ฉันเดาว่าเนื้อหาในknown_hostsไฟล์ของคุณไม่ดี มันควรจะเป็นคีย์โฮสต์บนหนึ่งบรรทัดที่ยาวมาก หากคุณมีชื่อโฮสต์ที่นั่น (ตัวอย่าง) มันจะไม่ทำงาน ฉันขอแนะนำให้คุณลบไฟล์นี้ (หากมีเพียงข้อมูลในโฮสต์เดียวนี้) และอนุญาตให้ SSH สร้างไฟล์ในครั้งต่อไปที่คุณเชื่อมต่อ มันควรจะเงียบหลังจากนั้น
tripleee

คำตอบ:


240

โซลูชัน: สร้าง~/.ssh/configไฟล์และแทรกบรรทัด:

UserKnownHostsFile ~/.ssh/known_hosts

คุณจะเห็นข้อความในครั้งต่อไปที่คุณเข้าถึง Github แต่หลังจากนั้นคุณจะไม่เห็นอีกต่อไปเพราะมีการเพิ่มโฮสต์ลงในknown_hostsไฟล์ วิธีนี้ช่วยแก้ไขปัญหาแทนที่จะซ่อนเพียงข้อความบันทึกเท่านั้น

ปัญหานี้ทำให้ฉันหยุดอยู่พักหนึ่ง ปัญหาเกิดขึ้นเนื่องจากไคลเอนต์ OpenSSH ที่คอมไพล์แล้วสำหรับ Windows ไม่ได้ตรวจสอบไฟล์ known_hosts~/.ssh/known_hosts

ssh -vvvvvvvvvvvvvvvvvvvvv 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
ใช่ฉันไม่คิดว่าการระงับคำเตือนหรือข้อผิดพลาดเป็นวิธีแก้ไขปัญหาที่เหมาะสม ;)
Jeremiah Gowdy

1
เมื่อเร็ว ๆ นี้ฉันประสบปัญหาเดียวกันในเครื่อง Ubuntu ของฉัน มันเริ่มทำงานด้วยวิธีนี้หลังจากฉันใช้~/.ssh/id_rsaคีย์อื่น (จากค่าเริ่มต้น) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ ในฐานะที่เป็น @JeremiahGowdy debug3: load_hostkeys: loading entries for host "172.16.3.101" from file "/dev/null"กล่าวถึงฉันมี ทำไม SSH เริ่มใช้งาน/dev/nullเป็น known_hosts หลังจากฉันเปลี่ยนรหัส?
m-ric

6
ใช้งานได้ดี! ในที่สุดคำเตือนที่โง่เง่าก็หยุด Btw บน Windows ~in ~/.ssh/configคือโฟลเดอร์หลักของผู้ใช้ ที่จะเปิดมันได้อย่างง่ายดายกดWin-Rชนิดใส่cmd พร้อมรับคำสั่งควรเปิดไว้ในโฟลเดอร์โฮมของคุณแล้ว พิมพ์cd .ssh Enterแล้วstart . Enterเพื่อเปิดโฟลเดอร์ใน Windows Explorer จากนั้นคุณสามารถสร้างการตั้งค่าไฟล์ใน Notepad (ไม่.txtขยายเมื่อมีการบันทึก) (ผู้ใช้มืออาชีพสามารถสะท้อนไปยังไฟล์ใหม่โดยตรงในพรอมต์คำสั่งเอง;)) เรียกใช้คำสั่ง git ที่เกี่ยวข้องกับรีโมทสองครั้ง (เช่นgit fetch) และคุณทำเสร็จแล้ว
ADTC

1
ทำไมคุณถึงมี 20 v สำหรับ ssh?
bubakazouba

3
@bubakazouba ยิ่งมีจำนวนมากเท่าใดบันทึกยิ่งได้รับมากขึ้นตรวจสอบเอกสารสำหรับสิ่งนั้น สามจะพอเพียงยี่สิบเป็น overkill: D
Petr Mánek

90

เพิ่มบรรทัดต่อไปนี้ไปยังไฟล์ ssh config ($ HOME / .ssh / config):

LogLevel=quiet

หากใช้ ssh จากบรรทัดคำสั่งให้เพิ่มตัวเลือกต่อไปนี้ในสตริงคำสั่ง:

-o LogLevel=quiet

ตัวอย่างเช่นต่อไปนี้จะพิมพ์เวอร์ชั่น gcc ที่ติดตั้งบน machine.example.org (และไม่มีคำเตือน):

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

1
การเพิ่ม "LogLevel = quiet" ไปยังไฟล์ "config" ใช้งานได้ ขอบคุณ.
Donald Taylor

3
เพื่อรักษาความปลอดภัยคุณควรใส่ "LogLevel = เงียบ" ไว้ในส่วน "โฮสต์"
โจ

39
LogLevel=quietเป็นความคิดที่ไม่ดีเขาต้องการแสดงข้อผิดพลาดทั้งหมดเขาเพียงต้องการหลีกเลี่ยงข้อผิดพลาดที่น่ารังเกียจนี้ อาจเป็นเพราะเขาหลอกให้ ssh ใช้/dev/nullเป็นknown_hostsไฟล์อาจเป็นเพราะเขาต้องการปิดการknown_hostsตรวจสอบลายนิ้วมือ แต่ทำไม่ได้เพราะ ssh overlords ไม่อนุญาตให้เขาทำ
Elazar Leibovich

@bukzor loglevel=errorยังคงแสดง "การเชื่อมต่อไปยัง <server> ปิด" เมื่อการเชื่อมต่อถูกยกเลิกซึ่งเป็นที่น่ารำคาญสำหรับการเขียนสคริปต์
Guss

ฉันลงคะแนนเพราะไม่ได้แก้ปัญหาจริงๆ มันซ่อนมันไว้
alaboudi

60

ตั้งค่าLogLevelเป็นERROR(ไม่QUIET) ใน~/.ssh/configไฟล์เพื่อหลีกเลี่ยงการเห็นข้อผิดพลาดเหล่านี้:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR

2
สิ่งนี้ทำงานได้ดีที่สุดในกรณีของฉัน - หรือคุณสามารถระบุ "-oLogLevel = ข้อผิดพลาด" ในบรรทัดคำสั่ง
Brad

5

ข้อความนั้นมาจาก SSH ซึ่งเตือนคุณว่าคุณกำลังเชื่อมต่อกับโฮสต์ที่คุณไม่เคยเชื่อมต่อมาก่อน ฉันจะไม่แนะนำให้ปิดเพราะจะหมายความว่าคุณอาจพลาดคำเตือนเกี่ยวกับการเปลี่ยนรหัสโฮสต์ซึ่งสามารถบ่งบอกถึงการโจมตี MITM ในเซสชัน SSH ของคุณ


1
แต่ฉันเชื่อมต่อกับมัน 10-15 ครั้งในแต่ละวันและฉันยังคงได้รับคำเตือนนี้
Donald Taylor

@JackB ดู~/.ssh/known_hostsและดูว่าโฮสต์ของคุณอยู่ในนั้นหรือไม่
Borealid

กุญแจสำคัญคือการเปลี่ยนแปลงด้วยเหตุผลบางอย่าง? ตรวจสอบลายนิ้วมือในไฟล์เทียบกับลายนิ้วมือที่ส่งออกโดย ssh นอกจากนี้โหมดของไดเรกทอรี. ssh ของคุณถูกตั้งค่าเป็น 0700 หรือไม่
Jason Carreiro

2
@ JasonCarreiro ฉันเป็นเด็กตัวใหญ่ฉันรู้ว่าจะไม่มีใครดึงการโจมตีของ MITM ในชั้นวางของฉันความปลอดภัยคือการแลกเปลี่ยนและฉันต้องการให้คอมพิวเตอร์เครื่องใหม่ทำงานนอกกรอบด้วยรหัสที่แบ่งไว้ล่วงหน้าโดยไม่จำเป็นต้องจัดการ CA หรือssh-keyscan.
Elazar Leibovich

4

ในการระงับข้อความเตือนsshคุณสามารถเพิ่มบรรทัดต่อไปนี้ใน~/.ssh/config:

Host *
LogLevel error

ซึ่งจะปิดใช้งานคำเตือน แต่ไม่ใช่ข้อความแสดงข้อผิดพลาด เช่นเดียวกับการตั้งค่าอื่น ๆ ใน~/.ssh/configคุณสามารถกำหนดค่าLogLevelแบบต่อโฮสต์ได้หากคุณต้องการการควบคุมที่ละเอียดยิ่งขึ้น


2

ส่วนใหญ่หมายความว่ามีการเปลี่ยนแปลงสำหรับคีย์สำหรับโฮสต์~/.ssh/known_hostsนั้นและจะไม่อัปเดตโดยอัตโนมัติ ดังนั้นทุกครั้งที่คุณได้รับข้อความเตือนนี้

สิ่งนี้เกิดขึ้นบ่อยครั้งสำหรับการเชื่อมต่อกับเครื่องเสมือนที่สร้างขึ้นใหม่ซึ่งเปลี่ยนรหัสด้วยที่อยู่ IP เดียวกัน

สารละลาย

หากคุณมีเพียงหนึ่งรายการจากนั้นคุณสามารถลบ ~/.ssh/known_hostsไฟล์และหลังจากการเชื่อมต่อครั้งแรกกุญแจจะอยู่ที่นั่นและไม่มีข้อความเตือนหลังจากนั้น

หากคุณมีหลายรายการคุณสามารถใช้คำสั่งด้านล่างเพื่อลบ

$ ssh-keygen -R <hostname>

มันใช้งานได้ดีสำหรับฉัน


0

หากคุณใช้ที่เก็บจาก GitHub ให้ลองใช้URL ของ HTTPSแทนเพื่อหลีกเลี่ยงปัญหานี้โดยสิ้นเชิง:

คลิกที่ปุ่ม HTTP และโคลน URL นั้นแทน

หากคุณโคลนที่เก็บของคุณจากภายในแอปพลิเคชัน Windows GitHub นี่คือสิ่งที่มันใช้สำหรับ URL ระยะไกล บางทีพวกเขารู้สิ่งที่เราไม่รู้


หมายเหตุ: หากคุณใช้การพิสูจน์ตัวตนด้วยรหัสส่วนตัวคุณจะไม่สามารถใช้ HTTP (S) ได้
qwertzguy

0

ฉันมีคำถามเดียวกันและพบว่าไม่มี.sshไฟล์อยู่ใน~นั้น ดังนั้นฉันจึงสร้าง.sshไดเรกทอรีภายใต้~เส้นทางและปัญหาได้รับการแก้ไข


0

ฉันได้รับปัญหาเดียวกันเมื่อฉันเริ่มใช้งานเครื่อง Windows ในกรณีของฉันมันเป็นเพราะการตั้งค่า SSH ของฉันไม่ได้ทำ Github มีเอกสารที่แม่นยำมากเกี่ยวกับการตั้งค่า SSH เมื่อได้รับการดูแลปัญหาได้รับการแก้ไข

https://help.github.com/articles/checking-for-existing-ssh-keys/ https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it- to-ตัวแทน ssh /


0

เพิ่มคีย์ ssh

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

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

ไฟล์ config crate

crate ~/.ssh/config

เพิ่มบรรทัดด้านล่าง

UserKnownHostsFile ~/.ssh/known_hosts

จากนั้นเพิ่มรหัสผับและโคลนที่เก็บข้อมูลของคุณ ... เสร็จสิ้น .....


0

ฉันพบข้อผิดพลาดเดียวกันใน Linux / Cent OS VM และเป็นเพราะ IP กำลังเปลี่ยนแปลงหลังจากรีสตาร์ท เพื่อแก้ไขปัญหานี้ฉันกำหนด IP คงที่ในเครือข่ายและเพิ่มรายการนั้นในไฟล์ / etc / hosts สำหรับ IP แบบคงที่พูดถึงค่าช่วงที่สูงขึ้นเล็กน้อย ตัวอย่างเช่นถ้า IP ปัจจุบันของคุณ (ipconfig / ifconfig) เป็น 192.168.0.102 ครั้งต่อไปหลังจากรีสตาร์ทอาจกลายเป็น 192.168.0.103 ดังนั้นกำหนด IP แบบคงที่ของคุณในการตั้งค่า IPV4 เป็น 192.168.0.181 ซึ่งควรทำเคล็ดลับ


พยายามเน้นคำหลักและชัดเจนด้วยรูปแบบที่จะช่วยในการเข้าถึงคำตอบของคุณสำหรับคนอื่น ๆ
Agilanbu

0

ในกรณีของฉันเป็นเพราะผู้ดูแลระบบที่ตั้งค่าเซิร์ฟเวอร์ตั้งค่าตัวเลือกเหล่านี้ ~/.ssh/config

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

ซึ่งทำงานได้ดีสำหรับกรณีส่วนใหญ่โดยไม่ใช้~/.ssh/known_hostsไฟล์ แต่สำหรับองค์กร gitlab repo ทุกครั้งที่มีการให้ "คำเตือน: เพิ่มอย่างถาวร ... ไปยังรายการของโฮสต์ที่รู้จัก"

วิธีการแก้ปัญหาของฉันคือการแสดงความคิดเห็นออกบรรทัดซึ่งได้รับอนุญาตการสร้างของUserKnownHostsFile /dev/null ~/.ssh/known_hostsจากนั้นก็ไม่ได้เตือนอีกหลังจากนั้น

นอกจากนี้คุณยังอาจมีเก่ารายการ / known_hostsไม่ถูกต้องในของคุณ

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

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


-1

ฉันกำลังแก้ปัญหาของฉันลงเนื่องจากการลงคะแนนอย่างต่อเนื่อง
มันเป็นทางออกที่ดีที่สุดโดยไม่แฮ็คซอร์สโค้ดของไคลเอ็นต์ SSH เอง
หากใครสนใจตรวจสอบประวัติการแก้ไข

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.