ระบุไฟล์ข้อมูลประจำตัว (id_rsa) ด้วย rsync


196

ฉันต้องทำการสำรองข้อมูลเป็นระยะของไดเรกทอรีบนเซิร์ฟเวอร์ระยะไกลซึ่งเป็นเครื่องเสมือนที่โฮสต์โดยองค์กรการวิจัย พวกเขาสั่งการเข้าถึง VMs ผ่าน ssh keys ซึ่งดีทั้งหมดยกเว้นว่าฉันไม่สามารถหาวิธีชี้ rsync ไปยังคีย์ ssh สำหรับเซิร์ฟเวอร์นี้ได้

rsync ไม่มีปัญหาถ้าไฟล์ที่สำคัญคือแต่เมื่อมันเป็นสิ่งที่ฉันได้รับ~/.ssh/id_rsaPermission denied (publickey)

ด้วย ssh ฉันสามารถระบุไฟล์ข้อมูลส่วนตัวด้วย-i, แต่ดูเหมือนว่า rsync จะไม่มีตัวเลือกดังกล่าว

ฉันยังได้ลองย้ายคีย์บนเครื่องท้องถิ่นไปชั่วคราว~/.ssh/id_rsaแต่นั่นก็ไม่ได้ผลเช่นเดียวกัน

TL; DR

คุณสามารถระบุไฟล์ระบุตัวตนด้วย rsync ได้หรือไม่?


1
มีประโยชน์ในการทำเช่นsudo rsyncนั้นซึ่งไม่ได้ใช้คีย์ ssh ของตัวเองด้วยเหตุผลบางอย่าง
ijoseph

1
@ijoseph ว่าผมใช้rsync -aAP "sudo -u user ssh" user@server:dir local_dirเมื่อซิงค์จากสคริปต์ cron ซึ่งทำงานเป็นราก
มาร์ติน Pecka

คำตอบ:


341

คุณสามารถระบุคำสั่ง ssh ที่แน่นอนผ่านตัวเลือก '-e':

rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/

ผู้ใช้ ssh หลายคนไม่คุ้นเคยกับไฟล์ ~ / .ssh / config คุณสามารถระบุการตั้งค่าเริ่มต้นต่อโฮสต์ผ่านไฟล์ปรับแต่ง

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

ในระยะยาววิธีที่ดีที่สุดคือการเรียนรู้ไฟล์ ~ / .ssh / config


ไม่ช่วยให้ฉันมี IdentityFile ใน ssh_config ฉันสามารถ "ssh web1" ได้โดยไม่มีปัญหา แต่เมื่อใช้ rsync กับ web1: ... มันล้มเหลวด้วย "ปฏิเสธสิทธิ์ (publickey)"
Zitrax

1
ลองหันมาฟุ่มเฟื่อยของการขนส่ง SSH นี้: ปัญหา / etc / ปัญหา / tmp /: rsync -e 'SSH -vv' web1
แดน Garthwaite

1
อา หากคุณทำสิ่งนี้โดยอัตโนมัติและจะไม่สามารถระบุรหัสผ่านได้คุณจะต้องใช้คีย์ ssh ที่ไม่มีรหัสผ่านเพิ่มเติมซึ่งกำหนดค่าไว้ที่ปลายทั้งสองด้าน หากคุณต้องการให้ rsync ทำงานโดยไม่มีรหัสผ่านในเซสชันแบบโต้ตอบคุณจะต้องใช้ ssh-agent
Dan Garthwaite

16
Duuuuuuude! ~/.ssh/configไฟล์ - คุณได้เปิดจักรวาลใหม่สำหรับฉัน!
demaniak

2
~ / .ssh / config ช่วยฉันทั้งวันขอบคุณมาก
smishra

17

สิ่งนี้สามารถทำได้ด้วยการกำหนดค่าผู้ใช้ SSH ดู: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ โดยทั่วไปแก้ไข ~ / .ssh / config:

$ nano ~/.ssh/config
#Add Hosts below 
Host server1
HostName examplehost.com
User username
Port 22
IdentityFile /path/to/key

$ rsync -e ssh /home/user/directory user@remote.host.net:home/user/directory/

ควรใช้กับโปรแกรมที่ใช้ SSH, rsync,



4

FYI:

1) กุญแจสาธารณะอยู่ในโฮมไดเร็กตอรี่ของผู้ใช้ที่ล็อกอินไปยังรีโมตเซิร์ฟเวอร์เช่นถ้าคุณล็อกอินเป็น "แบ็คอัพ" มันจะอยู่ที่ /home/backup/.ssh/authorized_keys ID ผู้ใช้เมื่อคุณเข้าสู่ระบบจะกำหนดรหัสสาธารณะที่ใช้ที่ปลายทาง

คุณสามารถเลือก ID ผู้ใช้เมื่อทำการเชื่อมต่อด้วยสองวิธีที่แตกต่างกัน:

ssh user_id@destination.server
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

ในทางกลับกันในตอนท้ายของคุณกุญแจส่วนตัวก็คล้าย ๆ กันในนามของผู้ใช้เว้นแต่คุณจะแทนที่มันเหมือนที่อธิบายไว้ในคำตอบของแดน

2) เพื่อวัตถุประสงค์ในการสำรองข้อมูลอาจต้องการสร้างคีย์ จำกัด ซึ่งถูก จำกัด ให้เรียกใช้เพียงคำสั่งเดียวเช่น "rsync" มีคำอธิบายที่ดีเกี่ยวกับการสำรองข้อมูล "rsnapshot" ซึ่งช่วยให้คุณสามารถสำรองข้อมูลเซิร์ฟเวอร์ทั้งหมดจากระยะไกลโดยใช้บัญชีผู้ใช้ที่ไม่มีสิทธิ์และ "sudo":

"rsnapshot" howto

Rsnapshot สามารถสำรองเซิร์ฟเวอร์ระยะไกลหรือเซิร์ฟเวอร์ในเครือได้อย่างง่ายดายทำให้เป็นเซิร์ฟเวอร์สำรองที่ตั้งเวลาไว้ที่ส่วนกลาง

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