คุณใช้ไฟล์ข้อมูลประจำตัวกับ rsync ได้อย่างไร?


125

คุณใช้ไฟล์ข้อมูลประจำตัวกับ rsync ได้อย่างไร?

นี่คือไวยากรณ์ที่ฉันคิดว่าฉันควรใช้กับ rsync เพื่อใช้ไฟล์ข้อมูลประจำตัวเพื่อเชื่อมต่อ:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234- ตัวตน' \
"/ local / dir /" remoteUser@22.33.44.55: "/ remote / dir /"

แต่มันทำให้ฉันมีข้อผิดพลาด:

คำเตือน: ไฟล์ Identity ~ / .ssh / 1234-identity ไม่สามารถเข้าถึงได้: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

ไฟล์นั้นใช้ได้สิทธิ์ตั้งค่าอย่างถูกต้องมันใช้งานได้เมื่อทำ ssh - ไม่ใช่กับ rsync - อย่างน้อยก็ในไวยากรณ์ของฉัน ผมทำอะไรผิดหรือเปล่า? พยายามมองหาไฟล์ข้อมูลประจำตัวบนเครื่องระยะไกลหรือไม่ ถ้าเป็นเช่นนั้นฉันจะระบุว่าผมอยากจะใช้แฟ้มตัวตนบนของท้องถิ่นเครื่อง?

คำตอบ:


86

คุณอาจต้องการใช้ssh-agentและssh-addโหลดคีย์ลงในหน่วยความจำ sshจะลองใช้ข้อมูลประจำตัวจาก ssh-agent โดยอัตโนมัติหากสามารถค้นหาได้ คำสั่งจะเป็น

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

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

คุณอาจต้องการตั้งค่าไฟล์ ~ / .ssh / config เพื่อจัดหาพอร์ตและข้อกำหนดคีย์ (ดูตัวเลือกเพิ่มเติมที่ `man ssh_config)

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

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


2
คำพูดคู่และการใช้ $ HOME ช่วยแก้ปัญหาของฉัน คุณสามารถอธิบายรายละเอียดเกี่ยวกับคำสั่งสองคำแรกได้หรือไม่? ฉันคุ้นเคยกับการตั้งค่าไฟล์กำหนดค่าแล้วปัญหาเดียวคือเมื่อฉันมีหลายบัญชีในเซิร์ฟเวอร์เดียว ฉันไม่คาดคิดว่ามันจะให้ฉันระบุไฟล์ข้อมูลประจำตัวหลายไฟล์สำหรับโฮสต์เดียวกัน
cwd

+1 สิ่งนี้ช่วยแก้ปัญหาของฉันเกี่ยวกับ drone.io :) ขอบคุณมาก
Bhargav Nanekalva

นี่คือสิ่งที่ยอดเยี่ยมของ friggin FTR คุณยังสามารถระบุชื่อผู้ใช้เริ่มต้นเพื่อเชื่อมต่อได้เช่นUser ubuntuเมื่อกำหนดค่าสำหรับอินสแตนซ์ EC2 Ubuntu :) ขอบคุณ!
DanielSmedegaardBuus

หากคุณใช้ csh style shell (เช่นfish) ให้ทำeval (ssh-agent -c)
Dave

77

ใช้อย่างใดอย่างหนึ่ง $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

หรือเส้นทางแบบเต็มไปยังคีย์:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

ทดสอบด้วย rsync 3.0.9 บน Ubuntu


3
ใช่มันใช้งานได้ดีไม่จำเป็นต้องใช้ ssh-agent หรือตัวเลือกการกำหนดค่าอื่น ๆ
laurent

2
+1: นี่เป็นปัญหาที่เกิดขึ้นเหมือนกับที่คุณทำไม่ได้ "ls '~" "
Alex

$HOMEจะไม่ทำงานในเครื่องหมายคำพูดธรรมดา (ไม่มีการขยายตัวแปร) ดังนั้นคุณต้องใช้เครื่องหมายคำพูดคู่หรือเส้นทางสัมบูรณ์
anol

ในมาตรฐาน Bash ควรใช้งานได้"$HOME"หรือ$HOMEไม่มีความแตกต่าง ( "${HOME}"เป็นไปได้ถ้าคุณต้องการทำให้ซับซ้อน)
Tombart

ฉันเปลี่ยนเครื่องหมายคำพูดเดี่ยวเป็นคู่แล้ว
Steve Bennett

36

คุณต้องระบุพา ธ สัมบูรณ์ไปยังไฟล์คีย์ข้อมูลประจำตัวของคุณ นี่อาจเป็นเรื่องแปลก ๆ ใน rsync (มันสมบูรณ์แบบไม่ได้เลย)

ฉันพบปัญหานี้เมื่อไม่กี่วันที่ผ่านมา :-)


คุณสามารถใช้ ~ แต่คุณไม่สามารถฝังไว้ในเครื่องหมายคำพูดเดียวได้เนื่องจากจะไม่ได้รับการแทนที่อย่างถูกต้องกับ / home / username / คุณต้องใช้เครื่องหมายคำพูดคู่เพื่อให้แก้ไขได้อย่างถูกต้องโปรดดูวิธีแก้ปัญหาของ @ilcavero
X Tian

24

สิ่งนี้ใช้ได้กับฉัน

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

2
ด้วยเหตุผลบางประการฉันต้องระบุเส้นทางแบบเต็มไปยังไฟล์ข้อมูลประจำตัวเช่น/home/user/.ssh/1234-identity. จากนั้นก็ใช้งานได้ อาจเป็นเพราะมันเป็นเปลือกที่แตกต่างกันดังที่แนะนำในคำตอบของ Darhuuk
osa

@ คุณช่วยฉันไว้ที่นั่น! ฉันมีปัญหากับ Drupal และ rSYNC และปัญหาคือเส้นทาง ... แปลก
Lee Woodman

6

คุณดำเนินการคำสั่งใน bash หรือ sh? สิ่งนี้อาจสร้างความแตกต่าง ลองเปลี่ยนด้วย~ $HOMEลองอ้างถึงสตริงสองครั้งสำหรับ-eตัวเลือก


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