Mengubah pengguna saat scp

16

Saya perlu menyalin file di antara mesin-mesin Linux. Masalah yang saya gunakan untuk login ( myuser), berbeda dari pengguna yang dapat mengakses file.

Jika saya hanya sshke mesin, saya dapat beralih menggunakan pengguna sudo su someuser, bisakah saya melakukannya sementara scp?

Saat menggunakan WinSCP saya berhasil melakukannya, dengan mengkonfigurasi SCP / Shell, jadi saya percaya pasti ada cara yang serupa untuk melakukannya melalui shell murni.

Tarlog
sumber
Saya bingung. Mengapa Anda tidak login sebagai pengguna yang memanipulasi file?
rahmu
Karena tidak mungkin untuk masuk menggunakan pengguna lain.
Tarlog
Bagaimana dengan koneksi sshdan eksekusi scp, seperti ini ssh myuser@host "sudo scp ...":?
rahmu
Mungkin jawabannya di sini dapat bekerja dalam situasi seperti itu? unix.stackexchange.com/questions/43094/ ... @ Tarlog Ini mengasumsikan bahwa pada mesin remote itu sendiri, Anda dapat ssh someuser @ remote
Bernhard

Jawaban:

9

Dengan asumsi bahwa pengguna yang Anda BISA ssh tidak memerlukan kata sandi untuk sudo su ke pengguna target, Anda dapat mencoba ini:

dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile" 

... Pikiran, saya masih tidak yakin bahwa hanya mengkonfigurasi targetuseruntuk hanya mengizinkan scp / sftp / rsync melalui SSH dan menggunakan RSA keypair untuk otentikasi bukanlah pilihan yang jauh lebih baik.

Shadur
sumber
1
atau tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"untuk banyak file
Matt
Juga benar, dan saya kira kita dapat memperdebatkan apakah berguna -zatau -jtidak tergantung pada kecepatan koneksi dan perangkat keras komputer di kedua sisi ...
Shadur
3

Jika Anda tahu kredensial untuk pengguna lain ( someuser) Anda bisa menentukannya pada scppanggilan Anda .

Dari man scphalaman:

Nama file dapat berisi spesifikasi pengguna dan host untuk menunjukkan bahwa file tersebut akan disalin ke / dari host itu. Nama file lokal dapat dibuat secara eksplisit menggunakan nama path absolut atau relatif untuk menghindari scp memperlakukan nama file yang mengandung ':' sebagai penentu host. Salinan antara dua host jarak jauh juga diizinkan.

Berikut sintaks yang digunakan:

[[user@]host:]/path/to/file

Contoh

Anda ingin menyalin file /home/foo/bardari host1ke localhost Anda, menggunakan pengguna someuser, ini perintahnya:

scp someuser@host1:/home/foo/bar .

Anda akan diminta untuk otentikasi (kata sandi, kunci, ...).

rahmu
sumber
1
Tidak mungkin masuk sebagai pengguna lain.
Tarlog
Kemudian buat login scp / rsync-only dengan kunci RSA.
Shadur
1
Tidak mungkin menggunakan pengguna lain menggunakan jenis login apa pun. Selain itu saya sudah menggunakan kunci RSA untuk ssh / scp.
Tarlog
1

Ini mungkin mungkin , tapi aku akan mengatakan itu adalah cara yang sangat canggung untuk pergi tentang itu.

Saran pertama saya adalah login sebagai pengguna itu. Bahkan jika Anda tidak memiliki kata sandi pengguna itu, Anda dapat menambahkan kunci ssh publik Anda sendiri ke otor_keys mereka dan kemudian scp menggunakan kunci mereka, seperti yang ditunjukkan rahmu.

Jika itu tidak memungkinkan, saran kedua saya adalah masuk dengan ssh, sudo ke pengguna dan membuat tarfile dari file yang ingin Anda salin dan letakkan di suatu tempat yang dapat dibaca oleh pengguna Anda sendiri. Kemudian scp down tarfile itu.

Jenny D
sumber
Tidak mungkin untuk masuk ke pengguna lain. Yap, saya menemukan saran kedua sendiri. Mencari cara yang mudah :)
Tarlog
Tautan yang diposting oleh gcb seharusnya bisa digunakan. Setidaknya jika Anda akan melakukan ini lebih dari sekali. Atau, tentu saja, Anda dapat mengubah hak akses ke file untuk memberikan akses pengguna Anda sendiri ke file tersebut.
Jenny D
Yah, saya mencoba membuat skrip (yang akan digunakan beberapa kali tentunya) yang akan digunakan oleh pengguna yang berbeda. Jadi memberikan akses kepada saya tidak akan membantu. Siapa pun yang dapat 'sudo su otheruser' harus dapat menjalankan skrip.
Tarlog
Kena kau. Saya akan mulai dengan tautan dari gcb, lalu jika Anda memiliki masalah dengan skrip mempostingnya dan melihat apakah kami dapat melakukan crowdsource bantuan.
Jenny D
1

gunakan -Spada scpperintah

misalnya /superuser/87597/how-to-perform-scp-as-a-sudo-user

itu akan memungkinkan Anda untuk mengeksekusi skrip, pada banyak seperti saya percaya Anda lakukan dengan kasus penggunaan winscp.

gcb
sumber
0

Saya mencoba memberikan beberapa contoh di artikel berikut ini. Ide dasarnya bukan menggunakan scp, tetapi gunakan dd dan ssh dengan sudo user switch. Lihat:

http://hmmss.wordpress.com/2014/07/02/ssh-and-scp-with-another-user

Gokhan Demir
sumber
1
Akan lebih baik untuk memberikan lebih banyak detail di sini, jika tautannya menjadi tidak valid, jawaban Anda hanya memiliki sedikit nilai.
Anthon