วิธีใช้การตั้งค่า `~ / .ssh / config` สำหรับแต่ละเซิร์ฟเวอร์โดยใช้ 'rsync'


14

ตอนนี้ฉันใช้ rsync พร้อม-e 'ssh -p 10022'ตัวเลือกเพื่อระบุพอร์ต

ฉันมีการตั้งค่า SSH ~/.ssh/configแล้วใน

Host myvps
  HostName example.com
  User ironsand
  Port 10022

ฉันสามารถใช้ config นี้จาก rsync ได้อย่างง่ายดายหรือไม่? หรือฉันสามารถสร้าง~/.rsyncและตั้งค่าพอร์ตเริ่มต้นสำหรับเซิร์ฟเวอร์ระบุได้หรือไม่?

คำตอบ:


22

ระบุ"myvps"เป็นชื่อโฮสต์

rsync /var/bar myvps:/home/foo ...

ทำ rsync จากผู้ใช้ที่บ้าน dir ที่เก็บ ssh ไว้ใช้งานได้สำหรับฉันแม้มันจะรองรับโหนดที่หวัง
Stalin Gino

8

สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันมีโฮสติ้งกระโดดใน ~ / .ssh / config ของฉัน

Host 10.x.y.z
    User cloud-user
    HostName vm-pivot
    IdentityFile /path_to_vm_key

Host 21ct-dev1-*
    User cloud-user
    HostName %h.example.com
    ProxyCommand ssh 10.x.y.z -W %h:%p
    IdentityFile /path_to_vm_key


rsync -e "ssh" local_path vm-app01:/remote_path

SSH: ไม่สามารถแก้ไขชื่อโฮสต์ vm-app01 : nodename หรือ servname ที่ระบุหรือไม่รู้จัก rsync: การเชื่อมต่อปิดโดยไม่คาดคิด (0 ไบต์ได้รับจนถึง) ข้อผิดพลาด rsync [ผู้ส่ง]: ข้อผิดพลาดที่ไม่ได้อธิบาย (รหัส 255) ที่ / SourceCache / rsync / rsync- 42 / rsync / io.c (452) [ผู้ส่ง = 2.6.9]

อย่างไรก็ตามมันใช้งานได้ดี

[kbroughton@kbroughton:project + (develop)] ssh vm-app01
Last login: Thu Apr 17 12:10:37 2014 from 10.a.b.c

แก้ไขฉันสามารถแก้ไขปัญหาชื่อได้ด้วยการบังคับให้ rsync ssh โหลดไฟล์กำหนดค่าด้วย -F sudo rsync -az -e "ssh -F /Users/kbroughton/.ssh/config"

สิ่งนี้ได้รับข้อผิดพลาดที่ผ่านมาหนึ่ง แต่ไปยังอีกข้อผิดพลาด ปฏิเสธการอนุญาต (publickey, gssapi-keyex, gssapi-with-mic) ssh_exchange_identification: การเชื่อมต่อถูกปิดโดยโฮสต์ระยะไกล

ยังพยายามตั้งค่า -i และ user @ อย่างชัดเจนในการเชื่อมต่อ แต่เกิดข้อผิดพลาดเดียวกัน

แก้ไข

จุดข้อมูลอื่น ถ้าฉันใช้ ip ลอยของ pivot vm (กระโดดโฮสต์) แทนชื่อ vm-pivot rsync ทำงาน แต่การทิ้ง ssh / config ของฉันทั้งหมดอย่างชัดเจนใน -e "ssh" ไม่ทำงาน รายละเอียด: โลคัลแม็ค, อัพเกรดเป็น rsync 3.1.0, รีโมต Centos rsync 3.0.9

[kbroughton@kbroughton:project + (develop)] sudo /usr/local/bin/rsync -az -e "ssh -F /Users/kbroughton/.ssh/config -i /Users/kbroughton/.ssh/identities/vm_key -W 10.x.y.z:22"  /var/data/sources/data.tar.gz user@vm-pivot:/home/user

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
ssh_exchange_identification: Connection closed by remote host
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]

[kbroughton@kbroughton:project + (develop)] sudo /usr/local/bin/rsync -az -e "ssh -F /Users/kbroughton/.ssh/config -i /Users/kbroughton/.ssh/identities/vm_key -W 10.x.y.z:22"  /var/data/sources/data.tar.gz user@10.x.y.z:/home/user
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(181) [sender=3.1.0]

วิธีนี้ใช้ได้ผล

[kbroughton@kbroughton:project + (develop)] sudo /usr/local/bin/rsync -az -e "ssh -F /Users/kbroughton/.ssh/config -i /Users/kbroughton/.ssh/identities/vm_key"  /var/data/sources/data.tar.gz user@10.x.y.z:/home/user

ฉันตระหนักว่าในกรณีของฉันฉันไม่สามารถใช้ทางลัด แต่ชื่อโฮสต์ที่เกิดขึ้นจริงเต็มรูปแบบสามารถนำมาใช้
dashesy

1

@darKoram สำหรับกรณีที่คุณเรียกใช้ ssh ด้วยพา ธ ที่ไม่ได้มาตรฐานและลองใช้ ssh ใน ProxyCommand ที่มีปัญหาเพราะไม่มีการสืบทอด คุณมีสองตัวเลือกนั่น: ให้ไฟล์เดียวกันในคำสั่งด้านในหรือแฮ็คแบบไดนามิก คุณอาจดูคำอธิบายโดยละเอียดในโพสต์บล็อกของฉันเกี่ยวกับที่: http://hubbitus.info/wiki/Blog:Ssh_forwarding_with_same_config_file_hack

ในสถานการณ์ที่คุณสั้น ๆ ควรช่วยกำหนดค่าเช่น:

Host 21ct-dev1-*
  User cloud-user
  HostName %h.example.com
  ProxyCommand ssh $( egrep -z -A1 '^-F$' /proc/$PPID/cmdline ) 10.x.y.z -W %h:%p
  IdentityFile /path_to_vm_key

0

@darKoram เรียกใช้กระบวนการ SSH ด้วย sudo:

sudo / usr / local / bin / rsync -az -e "ผู้ใช้ sudo -u ssh" /var/data/sources/data.tar.gz vm-app01: / home / user


-1

@darKoram

ชื่อ DNS แบบเต็มของ "vm-app01" คืออะไร ต้องเป็นสาธารณะเนื่องจากคุณอ้างว่าคุณสามารถเข้าถึงได้ภายใน ssh โดยไม่ต้อง rsync แต่คุณคาดว่า ssh จะจับโฮสต์ของคุณผ่านรูปแบบ "21ct-dev1- *" ฉันไม่เห็นว่ามันจะทำงานได้อย่างไร หากคุณพยายามจัดรูปแบบชื่อโฮสต์ควรมีลักษณะดังนี้:

Host *.21ct-dev1-domain.tld

จากนั้นการเรียก rsync ควรมีลักษณะดังนี้:

rsync -e "ssh" /local/path/ vm-app01.21ct-dev1-domain.tld:/remote/path/

"vm-app01" ได้รับการแก้ไขอย่างไร ไฟล์โฮสต์, ชนะ, nis, nss? คุณมีนามแฝงหรือไม่? คุณอยู่ในโดเมนหรือไม่ ดูเหมือนจะเป็นปัญหา DNS "ธรรมดา"

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