Tentukan file identitas (id_rsa) dengan rsync

197

Saya perlu membuat cadangan berkala direktori pada server jauh yang merupakan mesin virtual yang diselenggarakan oleh organisasi riset. Mereka mengamanatkan bahwa akses ke VM adalah melalui kunci ssh, yang semuanya baik, kecuali bahwa saya tidak tahu bagaimana mengarahkan rsync ke kunci ssh untuk server ini.

Rsync tidak memiliki masalah jika file kuncinya ~/.ssh/id_rsa, tetapi ketika itu adalah sesuatu yang lain saya dapatkan Permission denied (publickey).

Dengan ssh saya dapat menentukan file identitas -i, tetapi rsync tampaknya tidak memiliki opsi seperti itu.

Saya juga telah mencoba untuk sementara waktu memindahkan kunci pada mesin lokal ~/.ssh/id_rsa, tetapi hal yang sama tidak berhasil.

tl; dr

Bisakah Anda menentukan file identitas dengan rsync?

Jangari
sumber
1
Berguna juga untuk melakukan sudo rsync, yang tidak menggunakan kunci ssh sendiri, karena alasan tertentu.
ijoseph
1
@ijoseph Persis, saya gunakan rsync -aAP "sudo -u user ssh" user@server:dir local_dirsaat menyinkronkan dari skrip cron yang dijalankan sebagai root
Martin Pecka

Jawaban:

342

Anda dapat menentukan perintah ssh persis melalui opsi '-e':

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

Banyak pengguna ssh yang tidak terbiasa dengan file ~ / .ssh / config mereka. Anda dapat menentukan pengaturan default per host melalui file konfigurasi.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

Dalam jangka panjang yang terbaik adalah mempelajari file ~ / .ssh / config.

Dan Garthwaite
sumber
Tidak membantu saya untuk memiliki IdentityFile di ssh_config. Saya dapat "ssh web1" tanpa masalah, tetapi ketika menggunakan rsync ke web1: ... gagal dengan "Izin ditolak (publickey)".
Zitrax
1
Coba nyalakan verboseness dari transport ssh: rsync -e 'ssh -vv' web1: / etc / issue / tmp / issue
Dan Garthwaite
1
Ah. Jika Anda mengotomatisasi ini dan tidak akan dapat memberikan kata sandi, Anda akan memerlukan kunci ssh tanpa kata sandi tambahan yang dikonfigurasi di kedua ujungnya. Jika Anda ingin rsync bekerja tanpa kata sandi dalam sesi interaktif, Anda perlu menggunakan ssh-agent.
Dan Garthwaite
16
Duuuuuuude! yang ~/.ssh/configberkas - Anda telah membuka alam semesta baru bagi saya!
demaniak
2
~ / .ssh / config menyelamatkan saya hari ini, terima kasih banyak.
smishra
17

Ini dapat dilakukan dengan konfigurasi pengguna SSH lihat: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ pada dasarnya edit ~ / .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 [email protected]:home/user/directory/

Ini harus bekerja untuk semua program yang menggunakan SSH, rsync,

Cbaker510
sumber
4

FYI:

1) Kunci publik selalu ada di direktori home dari pengguna yang masuk ke server jauh yaitu jika Anda login sebagai "cadangan" itu terletak di /home/backup/.ssh/authorized_keys. ID pengguna saat Anda login mendefinisikan kunci publik yang digunakan di tujuan.

Anda dapat memilih ID pengguna saat membuat koneksi dengan dua cara berbeda:

ssh [email protected]
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

Di sisi lain di ujung Anda, kunci pribadi dalam cara yang sama di homedir pengguna kecuali Anda menimpanya seperti dijelaskan dalam jawaban Dan.

2) Untuk tujuan pencadangan, mungkin diinginkan untuk membuat kunci terbatas yang dibatasi untuk menjalankan hanya satu perintah seperti "rsync". Ada deskripsi yang baik tentang itu terkait dengan cadangan "rsnapshot" yang memungkinkan Anda untuk membuat cadangan seluruh server menggunakan akun pengguna yang tidak memiliki hak istimewa dan "sudo":

"rsnapshot" howto

Rsnapshot dapat dengan mudah mencadangkan sekelompok server jauh atau lokal membuatnya menjadi server cadangan terjadwal & terpusat.

ajaaskel
sumber