ฉันจะ rsync โดยไม่แจ้งให้ใส่รหัสผ่านโดยไม่ต้องใช้การรับรองความถูกต้องของกุญแจสาธารณะได้อย่างไร


44

ฉันต้องดำเนินการrsyncโดยไม่แจ้งรหัสผ่านให้ฉัน

ฉันเห็นในrsyncmanpage ว่าไม่อนุญาตให้ระบุรหัสผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่ง
แต่ฉันสังเกตเห็นว่ามันช่วยให้สามารถระบุรหัสผ่านผ่านตัวแปรRSYNC_PASSWORDได้

ดังนั้นฉันจึงลองส่งออกตัวแปร แต่rsyncขอรหัสผ่านต่อไป

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

ผมทำอะไรผิดหรือเปล่า?

โปรดพิจารณา:

กล่าวอีกนัยหนึ่งฉันต้องมีRSYNC_PASSWORDวิธีการทำงาน! :-)


คุณเปิดใช้งาน rsync daemon บนเซิร์ฟเวอร์ระยะไกลแล้วหรือยัง
ราหุลปาติล

คำตอบ:


13

ตัวแปรสภาพแวดล้อมของรหัสผ่านนี้ใช้ได้เฉพาะเมื่อใช้โปรโตคอล rsync เท่านั้น:

rsync rsync://username@1.2.3.4:/abc /def

สำหรับการทำงานคุณจะต้องเรียกใช้ rsync เป็น daemon เช่นกัน ( --daemonตัวเลือก) inetd.confซึ่งมักจะทำโดยการใช้

เมื่อใช้โปรโตคอลนี้ควรสอดคล้องกับเป้าหมายที่กำหนดไว้ในabc /etc/rsyncd.confชื่อผู้ใช้ควรมีอยู่ในauth usersบรรทัดสำหรับเป้าหมายนี้และไฟล์รหัสผ่านควรระบุด้วยsecrets fileตัวเลือก

เป็นไฟล์ลับที่มีการแม็พระหว่างชื่อผู้ใช้และรหัสผ่านในรูปแบบต่อไปนี้:

username:password

และเป็นรหัสผ่านนี้ที่คุณสามารถระบุได้โดยใช้ตัวแปรสภาพแวดล้อม RSYNC_PASSWORD


วิธีที่รวดเร็วในการเรียกใช้เซิร์ฟเวอร์ rsync คือhttps://s3.amazonaws.com/skaperen/rsend
Skaperen

65

หากrsyncdaemon ไม่ได้ทำงานบนเครื่องเป้าหมายและคุณไม่สนใจที่จะเปิดเผยรหัสผ่านให้ทุกคนในเครื่องท้องถิ่น ( ทำไมบางคนไม่ควรใช้รหัสผ่านในบรรทัดคำสั่ง ) คุณสามารถใช้sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

สังเกตช่องว่างที่จุดเริ่มต้นของคำสั่งในbashเชลล์สิ่งนี้จะหยุดคำสั่ง (และรหัสผ่าน) ไม่ให้ถูกเก็บไว้ในประวัติ ฉันไม่แนะนำให้ใช้RSYNC_PASSWORDตัวแปรเว้นแต่จำเป็นอย่างยิ่ง (ตามคำแก้ไขก่อนหน้านี้สำหรับคำตอบนี้) ฉันขอแนะนำให้คุณระงับการเก็บข้อมูลประวัติหรือล้างประวัติอย่างน้อยหลังจากนั้น นอกจากนี้คุณสามารถใช้tput resetเพื่อล้างประวัติเทอร์มินัลของคุณ


2
ทำไมคุณแนะนำให้เพิ่มรหัสผ่านข้อความที่ชัดเจนในคำสั่งนั่นคือ linux ที่ไม่ดีผู้ดูแลระบบ 101
Eddie

สะดวกสุด ๆ .. ค้นหาวิธีการนี้มาระยะหนึ่งแล้ว ขอขอบคุณ.
Isaac Gregson

6
แม้ว่าจะเป็นการดีที่จะเพิ่มรหัสผ่านเป็นข้อความที่ชัดเจน แต่นี่เป็นวิธีเดียวที่ทำได้ง่าย
Weston Ganger

15
คุณสามารถทำสิ่งนี้ได้เสมอ: sshpass -p $(cat passFile) ..เพื่อซ่อน pass ชัดเจนในประวัติทุบตี, และ chmod 400 on passFile เพื่อรักษาความปลอดภัย
Kresimir Pendic

3
ฉันรู้ว่านี่เก่า แต่เพื่อประโยชน์ของผู้อ่านที่ใหม่กว่าโปรดอ้างอิงรหัสผ่าน - รหัสผ่านสามารถมีอักขระพิเศษและช่องว่าง -p "$RSYNC_PASSWORD"
Paddy Landau

16

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

สิ่งนี้ช่วยให้การแบตช์ / การเขียนสคริปต์โดยไม่เปิดเผยรหัสผ่านและกุญแจสาธารณะสามารถลบออกจากเซิร์ฟเวอร์เป้าหมายได้หากคีย์ส่วนตัวถูกโจมตี

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

คุณยังสามารถเพิ่มอาร์กิวเมนต์ที่ต้องการ-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullไม่บังคับให้มีการตรวจสอบคีย์โฮสต์ระยะไกล ข้อควรระวัง - นั่นเป็นการเปิดรับมนุษย์ในการโจมตีกลางและเป็นการฝึกฝนที่ไม่ดีโดยทั่วไป!


1
สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณใช้ Bash shell ใหม่สำหรับ Windows 10 ฉันสงสัยว่าทำไม rsync ไม่ทำงานโดยไม่ต้องใช้รหัสผ่าน ฉันรู้ว่ามันใช้~/.sshโฟลเดอร์ภายในเชลล์ (ที่ rsync อาศัยอยู่) เมื่อฉันใช้ -e เพื่อชี้ไปที่กุญแจด้านใน/mnt/c/Users/MyUsername/.sshมันทำงานได้ตามที่คาดไว้ (ขอบคุณ: D)
Toby Deshane

12

มีประโยชน์มากสำหรับการเขียนสคริปต์คือการใช้--password-fileตัวเลือกบรรทัดคำสั่ง

  • สร้างไฟล์เปล่าที่ชื่อว่า rsync_pass
  • เขียนรหัสผ่านไปที่ไฟล์นี้ (ไม่มีอะไรเพิ่มเติม)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

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


4
หมายเหตุถึงผู้อ่าน: สิ่งนี้ยังต้องใช้ rsync daemon ที่ทำงานบนเซิร์ฟเวอร์ ฉันหวังว่ากุญแจ ssh จะเพียงพอสำหรับ rsync แบบไม่ใช้รหัสผ่าน
Sridhar Sarnobat

IMHO นี่เป็นวิธีที่ถูกต้องเพียงวิธีเดียวหากไม่ต้องการใช้ ssh
maxf130

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