ฉันจะตั้งค่า SSH ได้อย่างไรฉันจึงไม่ต้องพิมพ์รหัสผ่านเมื่อเชื่อมต่อกับโฮสต์
~/.ssh/config
ต้องการในตอนนี้ PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
ฉันจะตั้งค่า SSH ได้อย่างไรฉันจึงไม่ต้องพิมพ์รหัสผ่านเมื่อเชื่อมต่อกับโฮสต์
~/.ssh/config
ต้องการในตอนนี้ PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
คำตอบ:
หากคุณเกิดขึ้นที่จะใช้ GNOME ที่ซีฮอร์แอพลิเคชัน ( "รหัสผ่านและคีย์การเข้ารหัสลับ") สามารถทำมันสำหรับคุณ: ไฟล์ -> New -> Secure Shell สำคัญ
หากคุณต้องการเทอร์มินัลให้รันเพื่อสร้างคู่คีย์ ประเภท keypair ที่ถูกต้องคือ:ssh-keygen -t <type>
โปรแกรมจะขอรหัสผ่านและตำแหน่งที่จะบันทึกคีย์ใหม่ แนะนำให้ใช้พา ธ เริ่มต้นที่แนะนำเนื่องจากเครื่องมืออื่น ๆ ทั้งหมดจะค้นหาที่นั่น
อีกครั้งม้าน้ำมักจะสามารถทำเพื่อคุณ - ในคีย์ส่วนตัวของฉัน , คลิกขวาบนคีย์ SSH ของคุณและเลือกที่สำคัญการกำหนดค่าสำหรับเปลือกที่เชื่อถือได้
หรือssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
ในอาคารผู้โดยสาร
หรือด้วยตนเองทีละขั้นตอน:
.ssh
ไว้ในโฮมไดเร็กทอรีของผู้ใช้รีโมตบนรีโมตโฮสต์authorized_keys
(หากยังไม่มีอยู่)umask
chmod go-w ~/.ssh ~/.ssh/authorized_keys
~/.ssh/id_rsa.pub
) ลงใน~/.ssh/authorized_keys
ไฟล์ระยะไกลหากคุณโหลดกุญแจส่วนตัวของคุณลงในตัวแทน ssh มันจะถือกุญแจถอดรหัสในหน่วยความจำ เราต้องการสิ่งนี้เพื่อหลีกเลี่ยงการป้อนรหัสผ่านใหม่ทุกครั้งที่เราเชลล์ลงในเซิร์ฟเวอร์
ขั้นแรกเอเจนต์ต้องเริ่มทำงานหรือพา ธ ของซ็อกเก็ตการสื่อสารที่เรียกใช้งานถูกโหลดเข้าสู่ตัวแปร การรันssh-agentบนเทอร์มินัลจะสร้างคำสั่งสำหรับการกำหนดและตั้งค่าตัวแปรเอเจนต์ คำสั่งเหล่านี้สามารถบันทึกในไฟล์เพื่อใช้ในเทอร์มินัลอื่น อีกวิธีหนึ่งสามารถเรียกใช้คำสั่งเหล่านี้และลืมเกี่ยวกับการใช้ตัวแทนเดียวกันในเทอร์มินัลอื่นอีกครั้ง eval $(ssh-agent)
เช่น:
การโหลดกุญแจเป็นเรื่องง่าย ๆ ในการดำเนินการssh-add
และให้วลีรหัสผ่าน
หากคุณใช้ GNOME gnome-keyring-daemonมักจะมีฟังก์ชั่นเอเจนต์ SSH เหมือนกับ ssh-agent ดังนั้นคุณไม่จำเป็นต้องเริ่มต้นอะไรเลย GNOME จะโหลดและปลดล็อคกุญแจอัตโนมัติเมื่อเข้าสู่ระบบด้วย
หากทุกอย่างทำอย่างถูกต้องการใช้จะไม่พร้อมท์ให้คุณใส่รหัสผ่าน หากมีบางอย่างผิดปกติกับตัวแทนและไม่ใช่กุญแจคุณจะถูกขอให้พิมพ์วลีรหัสผ่านสำหรับกุญแจไม่ใช่รหัสผ่านสำหรับบัญชีผู้ใช้ssh user@server
สิ่งที่ใช้ ssh เพื่อการสื่อสารจะทำงานโดยไม่ต้องป้อนรหัสผ่านบัญชีผู้ใช้เมื่อโหลดรหัสที่ถูกต้องในเอเจนต์ โปรแกรมเช่นscp , sftpและrsyncใช้ประโยชน์จากสิ่งนี้
id_dsa
แทนid_rsa
และ ECDSA id_ecdsa
จะมีauthorized_keys2
- แต่ไม่น่าเป็นไปได้ที่คุณจะพบสิ่งที่มีอายุมากกว่า 5.0lsh
, ssh.com
และอื่น ๆ (Unix และไม่ใช่) เซิร์ฟเวอร์ SSH ไม่รวมอยู่ในบทช่วยสอนนี้การคัดลอกกุญแจสาธารณะไปยังโฮสต์ระยะไกล:
ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # สิ่งนี้ cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorized_keys '# หรือสิ่งนี้
ssh-agent> ~ / .ssh / cross-terminal-agent . ~ / .ssh / ข้ามขั้วตัวแทน
ssh-copy-id
ที่คัดลอกกุญแจสาธารณะไปยังโฮสต์เป้าหมายและกำหนดสิทธิ์โดยอัตโนมัติ
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(เพียงแทนที่username@server-ip-or-address
)
คุณไม่ได้ระบุว่าคุณใช้ยูนิกซ์อะไรยูนิกซ์ที่คุณกำลังเชื่อมต่อเปลือกหอยที่คุณกำลังใช้ตัวแปร SSH ที่คุณใช้เป็นต้นดังนั้นสิ่งนี้อาจจำเป็นต้องปรับเปลี่ยนเล็กน้อย สิ่งนี้ขึ้นอยู่กับ OpenSSH เวอร์ชั่นล่าสุดซึ่งใช้กับยูนิกซ์หลายรุ่น
ทั้งหมดนี้มาจากระบบเดสก์ท็อปของคุณ
ssh-keygen
ตรวจสอบให้แน่ใจว่าใช้ค่าเริ่มต้นสำหรับชื่อคีย์ ผมขอแนะนำให้คุณทำตั้งข้อความรหัสผ่านในการสำคัญที่มิฉะนั้นมันเป็นปัญหาด้านความปลอดภัย "-t rsa" จะไม่ใช่ความคิดที่ดี แต่อาจไม่จำเป็น
ssh-copy-id username@server
ซึ่งจะขอรหัสผ่านที่คุณใช้ในการเข้าสู่ระบบและตั้งค่ารหัสที่ได้รับอนุญาตสำหรับคุณ (ไม่จำเป็นต้องทำด้วยมือ)
จากนั้นสิ่งนี้:
`ssh-agent`
หรือบางทีนี่:
exec ssh-agent sh
หรือ:
exec ssh-agent bash
ที่จะเริ่มต้นตัวแทน SSH ที่สามารถถือกุญแจของคุณ ในรุ่น Unix ที่ทันสมัยหลายรุ่นหากคุณลงชื่อเข้าใช้แบบกราฟิกสิ่งนี้จะเกิดขึ้นแล้ว ตัวแปรแรก (ที่มี backticks) ทำให้เอสเอส - เอเจนต์เข้าไปในพื้นหลังและตั้งค่าตัวแปรสภาพแวดล้อมเพื่อพูดคุยกับมัน สองอันที่สองมีเอเจนต์รันเชลล์สำหรับคุณดังนั้นเมื่อคุณออกจากเชลล์เอเจนต์จะออก
ระบบปฏิบัติการยูนิกซ์สมัยใหม่หลายรุ่นจะมีเอเจนต์ทำงานอยู่แล้วโดยเฉพาะอย่างยิ่งถ้าคุณลงชื่อเข้าใช้แบบกราฟิก คุณอาจลอง " ps aux | grep ssh-agent
" หรือ " ps -ef | grep ssh-agent
"; หากมีบางสิ่งกำลังทำงานอยู่ให้ใช้สิ่งนั้น
จากนั้นในที่สุด:
ssh-add
มันจะขอข้อความรหัสผ่าน; ให้สิ่งที่คุณให้กับ ssh-keygen นอกจากนี้ยังมีวิธีที่จะทำให้มันถามกราฟิก และคุณสามารถวางสิ่ง ssh-agent และ ssh-add ลงในสคริปต์การเข้าสู่ระบบของคุณ (การตั้งค่าแตกต่างกันขึ้นอยู่กับเชลล์ที่คุณใช้) เพื่อทำสิ่งนี้โดยอัตโนมัติ แต่ Unix บางตัว (เช่น Ubuntu Linux ปัจจุบัน) ทำสิ่งเหล่านั้นโดยอัตโนมัติ สิ่งที่คุณต้องทำคือสร้างคีย์และใช้ ssh-copy-id เพื่อตั้งค่าบนรีโมตโฮสต์
ตอนนี้ " ssh username@server
" ควรทำงานโดยไม่ต้องขอการรับรองความถูกต้องใด ๆ เบื้องหลังมันใช้กุญแจที่ตัวแทนเอสเอสถืออยู่และขอให้ตัวแทนทำกลเม็ดการเซ็นชื่อให้กับมัน
เป็นไปได้ที่จะทำเช่นนี้ในPuTTYบน Windows เช่นกัน
เมื่อคุณมีคู่คีย์สาธารณะ / ส่วนตัวตั้งค่าทั้งหมด (ตามคำตอบอื่น ๆ ที่นี่แสดง) เรียกใช้ PuttyGen ในนั้นโหลดคีย์ส่วนตัวที่มีอยู่ซึ่งคุณได้ตั้งค่าไว้แล้วบันทึกเป็นคีย์ส่วนตัว PuTTY (ppk)
จากนั้นใน PuTTY เพียงคลิกที่เซสชันที่บันทึกไว้ซึ่งคุณต้องการลงชื่อเข้าใช้อัตโนมัติและคลิกโหลด จากที่นี่ไปที่การเชื่อมต่อ -> ข้อมูลในบานหน้าต่างด้านซ้ายและพิมพ์ "ชื่อผู้ใช้เข้าสู่ระบบอัตโนมัติ" ในชื่อผู้ใช้สำหรับเซิร์ฟเวอร์ระยะไกล:
หลังจากนั้นไปที่การเชื่อมต่อ -> SSH -> รับรองความถูกต้องและเรียกดู ppk ที่คุณทำใน PuttyGen:
จากนั้นกลับไปที่หน้าเซสชันและบันทึกเซสชันที่คุณโหลดไว้ก่อนหน้านี้
จากคำถามที่คล้ายกันมากในServerFaultฉันขอแนะนำให้ใช้ssh-copy-idซึ่งทำทุกขั้นตอนที่เกี่ยวข้องกับการตั้งค่าคีย์การตรวจสอบสิทธิ์สำหรับคุณ:
ssh-copy-id เป็นสคริปต์ที่ใช้ ssh เพื่อเข้าสู่เครื่องระยะไกล (สมมุติว่าใช้รหัสผ่านการเข้าสู่ระบบดังนั้นการตรวจสอบรหัสผ่านควรจะเปิดใช้งานเว้นแต่ว่าคุณได้ใช้รหัสประจำตัวหลายอย่างอย่างชาญฉลาด)
นอกจากนี้ยังเปลี่ยนสิทธิ์ของโฮมของผู้ใช้ระยะไกล, ~ / .ssh และ ~ / .ssh / authorized_keys เพื่อลบการเขียนกลุ่ม (ซึ่งจะป้องกันมิให้คุณเข้าสู่ระบบหาก sshd ระยะไกลมีการตั้งค่า StrictModes ในการกำหนดค่า)
หากได้รับตัวเลือก -i ไฟล์ข้อมูลประจำตัว (ค่าเริ่มต้นคือ ~ / .ssh / identity.pub) จะถูกใช้โดยไม่คำนึงว่ามีคีย์ใด ๆ ใน ssh-agent ของคุณหรือไม่
สิ่งที่คุณต้องทำคือเพียงแค่นี้:
ssh-copy-id user@host
พิมพ์รหัสผ่านของคุณหนึ่งครั้งและคุณก็พร้อมใช้งาน
นอกเหนือจากที่ได้รับการบอกวิธีการตั้งค่าคีย์ ssh แล้วฉันขอแนะนำKeychainเป็นส่วนหน้าคอนโซลssh-agentซึ่งช่วยให้คุณสามารถจัดการหนึ่งต่อกระบวนการของระบบแทนการเข้าสู่ระบบต่อ
ฉันรู้ว่ามีเครื่องมือของ GNOME และ KDE อยู่แล้วที่ทำแบบเดียวกัน แต่ถ้าคุณเป็นประเภทขี้ยาคอนโซลนี่ยอดเยี่ยมมาก (และสามารถใช้ได้กับระบบ Unix ส่วนใหญ่)
หากต้องการใช้งานเพียงผนวกสิ่งต่อไปนี้กับของคุณ~/.bashrc
(คล้ายกับเชลล์อื่น ๆ ):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
[ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
http://linuxproblem.org/art_9.html
เป้าหมายของคุณ
คุณต้องการใช้ Linux และ OpenSSH เพื่อทำให้งานของคุณเป็นแบบอัตโนมัติ ดังนั้นคุณต้องเข้าสู่ระบบโดยอัตโนมัติจากโฮสต์ A / ผู้ใช้ไปยังโฮสต์ B / ผู้ใช้ข คุณไม่ต้องการที่จะป้อนรหัสผ่านใด ๆ เพราะคุณต้องการโทร ssh จากภายในสคริปต์เปลือก
ฉันเขียนแบบฝึกหัดสั้น ๆ นี้มาก ๆ หลังจากที่ได้รับความผิดหวังจริงๆด้วยบทเรียนที่ยาวจริงๆจริงๆเพราะมันง่ายมาก :)
test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"
scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password
ssh destID@destMachine #type password
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
สีโป๊วมี-pw
ตัวเลือกที่ให้คุณสร้างทางลัดบนเดสก์ท็อปเช่นนี้:
"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
ssh-keygen
ในพื้นที่เชื่อมต่อทำงาน (หากมันบอกคุณว่าคุณต้องระบุประเภทให้ทำssh-keygen -t rsa
) เมื่อมันขอให้คุณระบุตำแหน่งไฟล์ให้ใช้ค่าเริ่มต้น เมื่อมันถามคุณสำหรับข้อความรหัสผ่านให้กด Enter เพื่อไม่ใส่ข้อความรหัสผ่านcat ~/.ssh/id_rsa.pub
(หรือตำแหน่งไฟล์เริ่มต้นใด ๆ ก็ตามssh-keygen
แม้ว่าคุณจะต้องติดตั้งแบบเก่าจริงๆssh
เพื่อให้มันแตกต่าง) คัดลอกผลลัพธ์ไปยังคลิปบอร์ดของคุณ~/.ssh/authorized_keys
(หาก~/.ssh
ไม่มีอยู่slogin
ในบางที่นี่เป็นวิธีที่ง่ายและสะดวกในการสร้างไฟล์ด้วยสิทธิ์ที่ถูกต้อง) วางคลิปบอร์ดของคุณ (ที่มีid_rsa.pub
จากโฮสต์อื่น) ลงในไฟล์นี้ถ้าคุณต้องการที่จะทำทั้งหมดใน terminal ใน Linux:
บนโฮสต์
cd ~ / .ssh /
ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "ข้อความแสดงความคิดเห็นถ้าคุณต้องการ" -f id_ArbitraryName
รายการใน {} เป็นตัวเลือกใช้ rsa หรือ dsa และเลือกขนาดบิต (ใหญ่กว่าปลอดภัยกว่า)
จากนั้นคุณต้องเพิ่มการอนุญาตไปยังไฟล์ authorized_keys และ authorized_keys2
cat id_ArbitraryName.pub >> authorized_keys
cat id_AribtraryName.pub >> authorized_keys2
จากนั้นดาวน์โหลดไฟล์ id_AribtraryName ไปยังกล่องที่คุณต้องการ ssh หากกล่องเชื่อมต่อนั้นใช้ระบบปฏิบัติการยูนิกซ์อาจจำเป็นต้องใช้ไฟล์ปรับแต่ง
บนกล่องเชื่อมต่อ
ในไฟล์ปรับแต่งของคุณ - vim ~ / .ssh / config
โฮสต์ example.host.com # หรือชื่อคอมพิวเตอร์ของคุณ
ชื่อผู้ใช้
IdentityFile ~ / .ssh / id_ArbitraryName
ไฟล์กำหนดค่าต้องการการอนุญาต 600 โฟลเดอร์ SSh ต้องการ 700
หวังว่าจะช่วยถ้าคุณพบปัญหาการตั้งค่าที่ถูกละเว้น