ฉันต้องการที่จะสามารถเข้าสู่ระบบจากระยะไกลผ่าน ssh โดยไม่ต้องใส่รหัสผ่านตลอดเวลา
- ฉันจะตั้งค่าได้อย่างไร
- จำเป็นต้องใช้คำสั่งอื่นเพื่อดำเนินการเซสชันที่ไม่มีรหัสผ่านหรือไม่?
ฉันต้องการที่จะสามารถเข้าสู่ระบบจากระยะไกลผ่าน ssh โดยไม่ต้องใส่รหัสผ่านตลอดเวลา
คำตอบ:
ดำเนินการคำสั่งนี้:
ssh-keygen
จากนั้นคุณจะต้องคัดลอกคีย์ใหม่ไปยังเซิร์ฟเวอร์ของคุณ :
ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
หลังจากคัดลอกคีย์แล้ว ssh ลงในเครื่องตามปกติ:
ssh user@host
ตอนนี้คุณสามารถเข้าสู่ระบบโดยไม่ต้องป้อนรหัสผ่านจากเครื่องที่คุณดำเนินการคำสั่งที่
not-marco@rinzwind-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo. |
|*B.+ . . |
|*=o . o . |
| = . = |
|. o S |
|E. |
| o |
| . |
| |
+-----------------+
not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password:
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
สิ่งนี้ถือว่าคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ของคุณผ่าน SSH เรียบร้อยแล้ว
คุณจะต้องสร้าง SSH Keypair ซึ่งจะช่วยให้คุณระบุตัวคุณได้โดยไม่ต้องใช้รหัสผ่าน คุณสามารถเลือกที่จะปกป้องกุญแจด้วยรหัสผ่านได้หากต้องการ แต่สามารถเว้นว่างไว้ได้ทำให้สามารถเข้าถึง SSH ได้โดยไม่ต้องใช้รหัสผ่านทั้งหมด
ssh-keygen
สิ่งนี้จะสร้างid_rsa
และid_rsa.pub
ไฟล์ pub
ไฟล์สิ่งที่ไปในเซิร์ฟเวอร์คีย์ส่วนตัว ( id_rsa
) เป็นสิ่งที่อยู่กับคุณและเป็นวิธีการที่คุณระบุตัวตนssh-copy-id user@server
แทนที่ผู้ใช้ด้วยผู้ใช้ระยะไกลและเซิร์ฟเวอร์ด้วยชื่อ DNS เครื่องหรือที่อยู่ IP มันจะพร้อมท์ให้ใส่รหัสผ่าน SSH ของคุณป้อนรหัสผ่านและหากทุกอย่างสำเร็จคุณจะสามารถเข้าถึงเครื่องได้ssh user@server
โดยไม่ต้องใช้รหัสผ่านssh-keygen
ตามคำแนะนำบนหน้าจอจากนั้นพิมพ์การssh-copy-id user@server
เปลี่ยนผู้ใช้ด้วยผู้ใช้ระยะไกลและเซิร์ฟเวอร์ด้วยเครื่องระยะไกล
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
คุณจะต้องทำเช่นนี้ด้วย:
พิมพ์คำสั่งต่อไปนี้:
ssh-keygen
กดEnterปุ่มจนกว่าคุณจะได้รับพรอมต์
ssh-copy-id -i root@ip_address
(มันจะขอรหัสผ่านของระบบโฮสต์อีกครั้ง)
ssh root@ip_address
ตอนนี้คุณควรจะสามารถเข้าสู่ระบบได้โดยไม่ต้องใช้รหัสผ่านใด ๆ
วิธีที่ฉันทำเช่นนี้มักจะเป็นดังนี้:
ssh-keygen -t rsa
(เมื่อได้รับแจ้งให้ใส่รหัสผ่านให้ปล่อยว่างไว้)
แล้ว:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(สิ่งนี้ต้องการโฟลเดอร์. ssh เพื่อที่จะอยู่ในโฮมไดเร็กตอรี่ของชื่อโฮสต์เป้าหมาย, โดยใช้ไฟล์ authorized_keys ในนั้น)
แน่นอนแทนที่ชื่อผู้ใช้ด้วยชื่อผู้ใช้ที่ต้องการและชื่อโฮสต์ด้วยชื่อโฮสต์หรือที่อยู่ IP ที่ต้องการ
หลังจากนั้นเพียงแค่ SSH ไปที่กล่องเช่นเดียวกับที่คุณคุ้นเคย
touch
และchmod
คำสั่งของ Rinzwind ล่ะ?
.ssh/authorized_keys
ไฟล์เป็น 0600 มิฉะนั้นจะไม่สามารถใช้งานได้
ปกติฉันจะใช้sshpass
เพื่อติดตั้งsudo apt-get install sshpass
และใช้งานแบบนี้
sshpass -p 'password' ssh your_username@your_server
sshpass
เป็นแฮ็คที่มีประโยชน์มากในกรณีที่คุณไม่สามารถเปลี่ยนวิธีการรับรองความถูกต้องบนเซิร์ฟเวอร์ระยะไกลได้!
ปิดใช้งานการพิสูจน์ตัวตนด้วยรหัสผ่าน
เนื่องจากผู้คนจำนวนมากที่ใช้เซิร์ฟเวอร์ SSH ใช้รหัสผ่านที่อ่อนแอผู้โจมตีออนไลน์จำนวนมากจะมองหาเซิร์ฟเวอร์ SSH จากนั้นเริ่มการเดารหัสผ่านแบบสุ่ม ผู้โจมตีสามารถลองใช้รหัสผ่านหลายพันรายการในหนึ่งชั่วโมงและเดาได้ว่าแม้รหัสผ่านที่แข็งแกร่งที่สุดจะได้รับเวลาเพียงพอ ทางออกที่แนะนำคือการใช้กุญแจ SSH แทนรหัสผ่าน เพื่อให้เดาได้ยากเหมือนคีย์ SSH ปกติรหัสผ่านจะต้องมีตัวอักษรและตัวเลขสุ่ม 634 ตัว หากคุณสามารถลงชื่อเข้าใช้คอมพิวเตอร์ด้วยรหัส SSH ได้ตลอดเวลาคุณควรปิดการใช้งานการตรวจสอบสิทธิ์ด้วยรหัสผ่านทั้งหมด
หากคุณปิดใช้งานการรับรองความถูกต้องของรหัสผ่านจะสามารถเชื่อมต่อจากคอมพิวเตอร์ที่คุณได้รับอนุญาตเป็นการเฉพาะเท่านั้น สิ่งนี้ช่วยเพิ่มความปลอดภัยของคุณได้อย่างมาก แต่ทำให้คุณไม่สามารถเชื่อมต่อกับคอมพิวเตอร์ของคุณจากพีซีของเพื่อนโดยไม่ต้องอนุมัติพีซีล่วงหน้าหรือจากแล็ปท็อปของคุณเมื่อคุณลบคีย์โดยไม่ได้ตั้งใจ
ขอแนะนำให้ปิดการใช้งานการตรวจสอบรหัสผ่านหากคุณไม่มีเหตุผลเฉพาะ
หากต้องการปิดใช้งานการตรวจสอบรหัสผ่านให้มองหาบรรทัดต่อไปนี้ในไฟล์ sshd_config ของคุณ:
#PasswordAuthentication yes
แทนที่ด้วยบรรทัดที่มีลักษณะดังนี้:
PasswordAuthentication no
เมื่อคุณบันทึกไฟล์และรีสตาร์ทเซิร์ฟเวอร์ SSH ของคุณแล้วคุณไม่ควรถามรหัสผ่านเมื่อคุณเข้าสู่ระบบ
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
ส่งผลกระทบต่อผู้ใช้ทุกคน? ถ้าไม่ฉันจะปิดมันสำหรับผู้ใช้ปกติได้อย่างไร ฉันไม่ต้องการที่จะ foobar มันและล็อคตัวเองออกมาอย่างสมบูรณ์
Permission denied (publickey).
PasswordAuthentication no
ฉันควรทำยังไงดี? ฉันจะเปลี่ยนPasswordAuthentication no
โฮสต์อื่นหรือไม่
วิธีนี้เป็นวิธีเฉพาะสำหรับผู้ใช้ที่ใช้Windowsเพื่อsshไปยังเครื่องระยะไกลรวมถึงภาพบนคลาวด์บนAWS CloudและGCE Cloud
เมื่อเร็ว ๆ นี้ใช้วิธีนี้ในการลงชื่อเข้าใช้รีโมตอิมเมจ vm ที่ปรับใช้ใหม่บน GCE
puttygen
ดาวน์โหลด puttygenwinscp
ดาวน์โหลด winscpหากคุณเป็นเจ้าของคีย์ส่วนตัว:
เปิดputtygen
กดปุ่มโหลดและเลือก*.pem
ไฟล์ไพรเวตคีย์ ( )
หากคุณไม่ได้เป็นเจ้าของคีย์ส่วนตัว:
puttygen
,(จากแหล่งที่ 1, ลิงค์ที่ระบุด้านล่าง)
notepad
)คัดลอกข้อมูลพับลิกคีย์ของคุณจากส่วน "พับลิกคีย์สำหรับการวางลงในไฟล์ OpenSSH authorized_keys" ของ PuTTY Key Generator และวางข้อมูลคีย์ไปยังauthorized_keys
ไฟล์
ตรวจสอบให้แน่ใจว่ามีข้อความเพียงบรรทัดเดียวในไฟล์นี้
อัปโหลดไฟล์ authorized_keys ไปยังโฮมไดเร็กทอรีที่เครื่องระยะไกล
สร้าง.ssh
ไดเรกทอรี (หากไม่มีอยู่)
คัดลอกauthorized_keys
ไฟล์ไปยัง.ssh
ไดเรกทอรี
(สิ่งนี้จะแทนที่authorized_keys
ไฟล์ใด ๆ ที่มีอยู่โปรดทราบสิ่งนี้)
หากมีไฟล์อยู่ให้เพิ่มเนื้อหาของไฟล์นี้ลงในไฟล์ที่มีอยู่
เรียกใช้คำสั่งเพื่อตั้งค่าการอนุญาต:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
ตอนนี้คุณจะสามารถssh
เข้าสู่เครื่องระยะไกลได้โดยไม่ต้องป้อนข้อมูลประจำตัวทุกครั้ง
หากคุณสร้างคีย์สาธารณะสาธารณะ / ราคาแพงและเข้าสู่ระบบโดยใช้กุญแจสาธารณะที่สร้างขึ้นใหม่ของเราคุณไม่จำเป็นต้องพิมพ์รหัสผ่านของคุณ ขึ้นอยู่กับการกำหนดค่าของเอเจนต์ key-ring และ / หรือ ssh ของคุณคุณอาจต้องปกป้องคีย์ของคุณด้วยวลีรหัสผ่าน
นี่คือหนึ่งในวิธีการสั้น ๆมากมายสำหรับคุณ มันมีความสำคัญอย่างยิ่งต่อความปลอดภัยของวิธีการนี้ว่าคีย์ส่วนตัวที่สร้างขึ้นยังคงเป็นส่วนตัว! คุณไม่ควรแชร์กับใครหรืออนุญาตให้เข้าถึงได้ในทุก ๆ ความสามารถ
คำสั่งนี้สร้างคีย์ที่แข็งแกร่งพอสมควรใน~/.ssh/
:
ssh-keygen -b 4096
ในคุณจะพบกุญแจสาธารณะของคุณเป็น~/.ssh/
id_rsa.pub
เนื้อหาควรถูกผนวกเข้ากับauthorized_keys
ไฟล์เซิร์ฟเวอร์ของคุณโดยการส่งผ่านสื่อที่สามารถเคลื่อนย้ายได้ (ไดรฟ์ปากกา) หรือโดยการเปิดใช้งานการตรวจสอบรหัสผ่านบนเซิร์ฟเวอร์ในไม่ช้าจากนั้นใช้ssh-copy-id ~/.ssh/id_rsa.pub username@server
และปิดใช้งานอีกครั้ง
หากคุณเลือกที่จะรักษาความปลอดภัยรหัสของคุณด้วยวลีรหัสผ่าน (ในขั้นตอนแรก) คุณสามารถใช้ssh-agent
หรือพวงกุญแจ Ubuntu เพื่อรักษาความปลอดภัย pharse นั้นในเครื่องเพื่อให้คุณไม่ต้องพิมพ์ตลอดเวลา
หากต้องการเพิ่มบางอย่าง:
Mac โดยค่าเริ่มต้นไม่มีssh-copy-id
คุณจะต้องติดตั้งเอง:
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id
หาข้อมูลเพิ่มเติมได้ที่นี่: https://github.com/beautifulcode/ssh-copy-id-for-OSX
หากคุณทำการส่งต่อพอร์ตคำสั่งควรเป็นดังนี้:
ssh-copy-id "not-marco@127.0.0.1 -p 2222"
โปรดทราบว่าจำเป็นต้องใช้เครื่องหมายคำพูด
แอปพลิเคชันssh
และscp
สำหรับการเข้าสู่ระบบจากระยะไกลและการคัดลอกระยะไกลตามลำดับช่วยให้คุณสามารถสื่อสารกับโฮสต์ระยะไกลโดยไม่ต้องให้รหัสผ่าน สิ่งนี้ต้องการให้คุณทำตามขั้นตอนการรับรองความถูกต้องเช่นเดียวกับที่อธิบายไว้ด้านล่าง โดยลูกค้าเราหมายถึงเครื่องที่คุณนั่งอยู่และโดยเซิร์ฟเวอร์เราหมายถึงเครื่องที่คุณต้องการเข้าสู่ระบบโดยไม่ต้องให้รหัสผ่าน ขั้นตอนของกระบวนการรับรองความถูกต้องคือ:
$HOME/.ssh
เหล่านี้จะถูกเก็บไว้ในไฟล์ใน$HOME/.ssh/authorized_keys
หรือ$HOME/.ssh/authorized_keys2
บนเซิร์ฟเวอร์โปรโตคอลการตรวจสอบมีสามประเภท คุณระบุประเภทเมื่อรัน ssh-keygen:
chmod 0700
เพื่อให้แน่ใจว่าไฟล์นี้ไม่สามารถอ่านได้สำหรับผู้อื่น) และidentity.pub (พับลิกคีย์)ssh-keygen -t rsa
และผลลัพธ์ในไฟล์id_rsa
(ไพรเวตคีย์) และid_rsa.pub
(พับลิกคีย์)ssh-keygen -t dsa
และผลลัพธ์ในไฟล์id_dsa
(ไพรเวตคีย์) และid_dsa.pub
(พับลิกคีย์)เมื่อรัน ssh-keygen คุณสามารถพึ่งพาคำตอบเริ่มต้นได้ (หมายความว่าคุณไม่ให้ข้อความรหัสผ่าน) สิ่งนี้ทำให้การตั้งค่าทั้งหมดง่าย แต่ยังไม่ปลอดภัย
คุณสามารถระบุประเภทของคีย์ที่จะใช้โดยตัวเลือกเพื่อssh ; ssh -1
บังคับให้ใช้คีย์RSA1 (รุ่นโปรโตคอล 1) ในขณะที่ssh -2
บังคับให้sshลองใช้คีย์RSAหรือDSAเท่านั้น (รุ่นโปรโตคอล 2) ในตัวอย่างด้านล่างเราสร้างและติดตั้งคีย์ RSA1และDSAบนโฮสต์ระยะไกลเพื่อให้คุณมีความยืดหยุ่นมากขึ้น คุณสามารถสร้างไฟล์ปรับแต่งใน.ssh
ไดเรกทอรีด้วยบรรทัด
Protocol 1,2
สิ่งนี้ทำให้sshลองเชื่อมต่อRSA1 (รุ่นโปรโตคอล 1) ก่อนRSA / DSA (รุ่นโปรโตคอล 2)
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
นี่คือทั้งหมดที่คุณต้องทำถ้าคุณไม่ได้ใช้วลีรหัสผ่านเมื่อสร้างคีย์ คุณสามารถทดสอบการเชื่อมต่อโดยใช้ ssh $ ระยะไกลและดูว่าคุณสามารถเข้าสู่ระบบได้โดยไม่ต้องให้รหัสผ่าน (คุณอาจต้องใช้-1
หรือ-2
เป็นตัวเลือกในการssh ) แน่นอนสามารถทำขั้นตอนนี้ซ้ำสำหรับเครื่องที่คุณต้องการเข้าสู่ระบบ
ถ้าคุณไม่ใช้รหัสผ่านที่คุณจะต้องเรียกใช้โปรแกรมssh-agent
ที่จะเริ่มต้นเปลือกพิเศษตามด้วยssh-add
การลงทะเบียนของคุณคีย์ / รหัสผ่านสำหรับการsshd
ร่วมกับ ดู man pages สำหรับโปรแกรมเหล่านี้สำหรับข้อมูลเพิ่มเติม
ssh-no-password.sh
#!/bin/sh
# create ssh connections without giving a password
if [ $# -lt 1 ]; then
echo Usage: $0 username@remotehost
exit
fi
remote="$1" # 1st command-line argument is the user@remotehost address
this=$HOST # name of client host
# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
echo "just type RETURN for each question:" # no passphrase - unsecure!!
# generate RSA1, RSA and DSA keys:
echo; echo; echo
ssh-keygen
echo; echo; echo
ssh-keygen -t rsa
echo; echo; echo
ssh-keygen -t dsa
else
# we have $HOME/.ssh, but check that we have all types of
# keys (RSA1, RSA, DSA):
if [ ! -f $HOME/.ssh/identity ]; then
# generate RSA1 keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate RSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t rsa
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate DSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t dsa
fi
fi
cd $HOME/.ssh
if [ ! -f config ]; then
# make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
echo "Protocol 1,2" > config
fi
# copy public keys (all three types) to the destination host:
echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:
echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"
echo; echo; echo
echo "try an ssh $remote"
คัดลอกมาจาก: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html
ฉันต้องการเพิ่มคำตอบสำหรับผู้ที่อาจพบว่าพวกเขาควรป้อนรหัสผ่านแม้ว่าพวกเขาจะอ่านคำตอบทั้งหมดที่นี่เพราะคุณได้ตั้งค่า IdentitiesOnly เป็นใช่ และคำตอบที่นี่สามารถช่วยคุณประหยัดเวลาในการจัดการหลาย ๆ คีย์เป็นกุญแจสำหรับคอมไพล์หรือเซิร์ฟเวอร์
หลังจากฉันสร้างรหัสและคัดลอกไปยังเซิร์ฟเวอร์:
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
ฉันพบว่ามันใช้งานไม่ได้
จากนั้นฉันไปตรวจสอบ~/.ssh/config
ไฟล์บนไคลเอนต์ฉันเห็นสิ่งนี้ที่ด้านล่าง:
Host *
IdentitiesOnly yes
จากนั้นฉันจะเพิ่มสิ่งนี้ด้านบน:
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
ssh somename
ฉันเพียงแค่สามารถเข้าสู่ระบบโดยการป้อน
จากนั้นคุณสามารถเพิ่มหลายคีย์ ssh โดยใช้ชื่อที่คุณชื่นชอบและคุณจะต้องเพิ่มการตั้งค่าเช่นสี่บรรทัดด้านบนลงในไฟล์ปรับแต่ง
โฮสต์คือชื่อที่คุณต้องการป้อนเมื่อคุณเชื่อมต่อเซิร์ฟเวอร์ในภายหลัง HostName เป็น ip ของเซิร์ฟเวอร์ ผู้ใช้คือชื่อผู้ใช้ที่คุณเข้าสู่เซิร์ฟเวอร์ และ identityfile เป็นไฟล์ที่คุณเก็บคีย์ที่คุณสร้างขึ้น