Rsync Paswordless ผ่าน SSH โดยไม่มีการรับรองความถูกต้องที่สำคัญ [ไม่ปลอดภัย]


12

ฉันต้องการตั้งค่างาน RSync ที่จะเชื่อมต่อผ่าน SSH

ฉันมีคอมพิวเตอร์ของฉัน (backup @ myhost) และโฮสต์ระยะไกล (test @ remhost) และฉันต้องการสำรองข้อมูลโฟลเดอร์ ~ / บางสิ่งที่มีเนื้อหาทั้งหมด การทดสอบผู้ใช้ ssh มีเพียงการอ่านไฟล์และโฟลเดอร์ทั้งหมดใน ~ / โฟลเดอร์ ฉันต้องการใช้ rsync เพื่อคัดลอกโฟลเดอร์ test @ remhost: ~ / something ไปยังโฟลเดอร์ backup @ myhost: ~ / bak

เพื่อจุดประสงค์นี้ฉันใช้คำสั่งต่อไปนี้ผ่าน BASH บน Ubuntu 11.10 (Oneiric):

rsync -avz -e ssh test@remhost:~/something/ ~/bak/

หลังจากกดปุ่มฉันได้รับสิ่งนี้:

test@remhost's password:

ฉันพิมพ์รหัสผ่านและ rsync ทำงานได้

ฉันต้องการให้คำสั่งด้านบนป้อนรหัสผ่านโดยอัตโนมัติและส่งเป็นพารามิเตอร์หรือป้อนโดยอัตโนมัติและเริ่มงาน

ฉันพยายามเรียกใช้rsync -avz -e ssh test:password@remhost:~/something/ ~/bak/แต่ก็ยังขอรหัสผ่านและมันน่ารำคาญ

ฉันไม่ต้องการได้ยินเกี่ยวกับคีย์ชนิดใด ๆ (RSA, DSA หรืออื่น ๆ ) ฉันแค่ต้องการคำสั่งง่ายๆที่จะเข้าสู่ระบบและทำงาน

แก้ไข:สถานการณ์ที่เป็นไปได้อาจเกิดขึ้นหากการรับรองความถูกต้องของรหัสสาธารณะถูกปิดใช้งานและคุณไม่สามารถเปลี่ยนแปลงได้ เช่นถ้าคุณใช้ OpenSSH คุณจะต้องใช้สิทธิ์ root บนเซิร์ฟเวอร์เพื่อแก้ไขไฟล์และเพื่อเพิ่มsshd_configPubkeyAuthentication yes

แก้ไข:นี่คือสิ่งที่ได้ผลที่สุดสำหรับฉัน:

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/

โปรดทราบว่าวิธีนี้ไม่ถือว่าปลอดภัยเนื่องจากจะส่งรหัสผ่านเป็นข้อความธรรมดาและมีความเสี่ยงต่อการโจมตีจากคนกลาง ขอแนะนำให้ใช้คีย์การพิสูจน์ตัวตนเพื่อความปลอดภัยที่สูงขึ้น


3
คุณจะไม่ได้รับคำตอบใด ๆ หากคุณบอกคนอื่นไม่ให้บอกคำตอบ
Mike Scott

7
นี่ไร้จุดหมาย ปัญหาของการตรวจสอบคีย์คืออะไร หากมีการกำหนดค่าการพิสูจน์ตัวตนแบบใช้คีย์จากนั้นคุณจะมีเพียงคำสั่งง่ายๆที่ทำงานได้โดยอัตโนมัติตามที่คุณต้องการ ดังนั้นฉันไม่สามารถเห็นสิ่งที่เป็นปัญหากับสิ่งนี้ การจัดเก็บรหัสผ่านไว้ที่ใดที่หนึ่งเพื่อระบุว่า "อัตโนมัติ" เป็นหนึ่งในช่องโหว่ด้านความปลอดภัยที่ใหญ่ที่สุดที่ฉันสามารถจินตนาการได้
LGB

ฉันไม่ต้องการให้ใครมาบรรยายเรื่องความปลอดภัย ฉันรู้แล้วความหมาย ฉันต้องทิ้งทุกอย่างไว้บนเซิร์ฟเวอร์ตามที่เป็นอยู่และไม่เปลี่ยนแปลงอะไรเลย สำหรับข้อมูลของคุณฉันได้ลองใช้รหัสและยังขอรหัสผ่านจากฉันดังนั้นข้อโต้แย้งของคุณไม่ถูกต้อง!
Sorin-Mihai Oprea

1
ไม่สำหรับเหตุผลที่ดีไม่มีพารามิเตอร์ดังกล่าวตามค่าเริ่มต้น ดูคำตอบของ Migs ถ้าคุณต้องการพารามิเตอร์แบบนี้
lumbric

2
@Sorin Mihai Oprea: ถ้ามันไม่ได้ผลสำหรับคุณมันไม่ดีเหรอ? น่าสนใจ สำหรับข้อมูลของคุณ: ในฐานะวิศวกรระบบอินเทอร์เน็ตที่ทำงานกับ ISP เราใช้การรับรองความถูกต้องตามคีย์กับ ssh บนเซิร์ฟเวอร์มากกว่า 100 แห่ง มันใช้งานได้สำหรับเราที่น่าสนใจ อย่าเรียกสิ่งที่ไม่ดีเพียงเพราะคุณไม่เข้าใจวิธีการทำงานและวิธีการกำหนดค่า หากคุณพูดถูกมันจะไม่ทำงานสำหรับใครก็ตามที่จะดึงดูดความสนใจเป็นข้อผิดพลาดในการติดตั้งเซิร์ฟเวอร์ ssh ที่สำคัญ :) ดังนั้น agrument ของฉันไม่ถูกต้องเพียงคุณไม่สามารถกำหนดค่าได้ดีด้วยเหตุผลบางประการ มันไม่เหมือนกันขอโทษ
LGB

คำตอบ:


30

อาจจะลอง sshpass

ดูเหมือนง่ายพอที่จะใช้ ... มันใช้ได้ผ่านฉลาดเช่นกัน

ฉันกำลังมองหาบางอย่างเช่นนี้ก่อนที่ฉันจะคัดลอกกุญแจไปรอบ ๆ แต่เนื่องจากฉันได้รับกุญแจของฉันทุกที่ที่ฉันต้องการอยู่แล้วฉันยังไม่ได้ลองเลย

โปรดสังเกตข้อจำกัดความรับผิดชอบในบทช่วยสอนนั้นเกี่ยวกับการเปิดเผยรหัสผ่านของคุณ


สำหรับทุกคนที่ต้องการทำสิ่งนี้:

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/

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

แน่นอน ... แต่นั่นเป็นสาเหตุที่เรียกว่าโอเพ่นซอร์สใช่มั้ย หลายรสชาติ ... ผลเหมือนกัน!
Sorin-Mihai Oprea

1
ขอขอบคุณที่ไม่เพียง แต่บอกว่ารหัสผ่านไม่ถูกต้องอย่าใช้พวกเราบางคนในอุปกรณ์รุ่นเก่าของ OLDDDD เพียงต้องการสิ่งเหล่านี้เพื่อให้ได้จนกว่าอุปกรณ์ใหม่จะมาถึง :)
Theodore Howell

7

การเปลี่ยนแปลงในโซลูชันของคุณซึ่งมีความปลอดภัยต่อภัยคุกคามความปลอดภัยมากขึ้นคือการจัดเก็บรหัสผ่านของคุณในไฟล์ที่มีการอนุญาตที่แน่นหนาและใช้การ-fตั้งค่าสถานะด้วยshpass:

sshpass -f '/home/me/.password' rsync --progress -avz -e ssh
test@remhost:~/something/ ~/bak/

ความแตกต่างคือการแสดงรายการกระบวนการทำงานจะไม่แสดงรหัสผ่านของคุณในบรรทัดคำสั่งตอนนี้มันจะแสดงเส้นทางไปยังไฟล์ที่รหัสผ่านของคุณเป็นเท่านั้น


คำตอบนี้ดีกว่าคำตอบที่ยอมรับ
vietnguyen09

1

ฉันนึกภาพไม่ออกว่าสถานการณ์ใดที่การพิสูจน์ตัวตนด้วยรหัสสาธารณะโดยไม่มีข้อความรหัสผ่านจะไม่ใช่ทางออกที่ดีกว่าสำหรับการเข้าสู่ระบบ ssh / rsync แบบอัตโนมัติ

อย่างไรก็ตามexpectควรเป็นวิธีที่จะบรรลุสิ่งที่คุณต้องการจะทำ คุณไม่สามารถไพพ์รหัสผ่านไปที่ ssh ได้ แต่สิ่งนี้คล้ายกันมาก วิธีการทำเช่นนั้นเป็นคำตอบที่นี่ที่ StackOverflow


ขอบคุณสำหรับข้อเสนอแนะ แต่ฉันพบว่า sshpass ง่ายกว่าเยอะมาก!
Sorin-Mihai Oprea

1

ฉันพบว่า sshpass ใช้งานได้ แต่เนื่องจากเทอร์นัลบอกว่าSSHPASS read: Enter passphrase for key '/home/ubuntu/.ssh/id_rsa':คุณต้องใช้งานบางอย่างเช่นนี้:

sshpass -P passphrase -p 'password' rsync /path/to hostname:/destination/path -av --progress -e ssh

ที่-Pระบุให้แจ้งให้ฉันค้นหาพบโดยวิ่งsshpass -vและค้นหามันหาวลีpasswordที่ไม่ได้มี


0

สิ่งแรกคือทำ ssh โดยไม่ต้องpassowrd/bypassใช้รหัสผ่านในขณะที่คุณสามารถเห็นเราสามารถใช้ssh-copy-id -i ./ssh/id_rsa.pubกับเครื่องเป้าหมาย

หลังจากการทดสอบเครื่องสามารถ ssh ได้จากระยะไกลโดยไม่ต้องใช้รหัสผ่านจากนั้น rsync ในทางต่อไปของหลักสูตรจากเครื่องท้องถิ่นเข้าสู่target/serverเครื่อง

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