Pada host lokal saya, alpha
saya memiliki direktori foo
yang dipetakan melalui sshfs menjadi host bravo
sebagai berikut:
$ sshfs charlie@bravo:/home/charlie ~/foo
Namun, pada host bravo
ada pengguna lain, delta, yang saya inginkan sudo /bin/su
, sehingga saya dapat melakukan pekerjaan bravo:/home/delta
. delta
mungkin tidak dapat masuk melalui ssh; untuk alasan yang tidak bisa saya ubah, Anda hanya bisa sudo ke delta begitu Anda berada di mesin.
Biasanya aku ssh ke bravo
, kemudian sudo ke delta, tapi aku bertanya-tanya apakah ada cara yang bisa aku lakukan ketika aku punya dir rumah charlie yang dipasang melalui ssh.
Jawaban:
Ini akan bervariasi tergantung pada OS server yang Anda hubungkan. Untuk centOS 5 Anda akan menambahkan opsi sshfs mount:
-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"
Untuk Ubuntu 9.10 (saya pikir, mungkin 9,04, tapi mungkin sama untuk keduanya) atau Debian yang akan Anda tambahkan:
-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server"
.Untuk menemukan jalur yang benar untuk sistem lain yang menjalankan openSSH dijalankan
sudo grep Subsystem /etc/ssh/sshd_config
dan cari lokasi biner sftp-server.
Anda mungkin perlu men-setup sudo dengan NOPASS: {path to sftp-server} atau membuat dengan
ssh user@host sudo -v
sehinggasudo
memiliki timestamp yang diperbarui untuknotty
. Dalam kasus saya, dua perintah saya adalah:sumber
sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"
?ssh host sudo -v
tidak membuat sudo saya senang - ia ingin tty sebelum membiarkan saya sudo. Pikiran?ssh -t myuser@host sudo -v sshfs myuser@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u root /usr/lib/openssh/sftp-server"
itu tidak bekerja: \ - itu hanya mengatakan "host jarak jauh telah terputus"Anda dapat menggunakan bindfs + sshfs untuk mengakses file pengguna lain (bahkan root).
Pertama Anda me-mount 'root' Anda atau direktori lain di bawah pengguna Anda dengan uid yang dipetakan ulang.
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
dan kemudian cukup sshfs ke direktori.
sshfs USER@SERVER:tmproot TARGET
Tetapi untuk keamanan, lebih baik tidak memetakan seluruh root
/
tetapi hanya sebagian yang Anda butuhkan. Sebagai contoh: Anda dapat menggunakan metode ini untuk me-mount direktori pengguna lain ke Anda, misalnya file dari / var / www ke ~ / www dan remap root ke pengguna Anda sehingga Anda akan memiliki akses penuh ke sana.Jika Anda memerlukan akses untuk mempertahankan uid atau memiliki akses ke banyak pengguna, maka saya akan membuat pengguna baru misalnya "rootfs" dengan uid = 0 dan / bin / false dan melakukan sshfs normal.
sumber
Anda mungkin mencoba (tapi saya rasa itu tidak akan berhasil):
Saya tidak mengerti sshfs dengan sangat baik, jadi Anda mungkin bisa membuat sesuatu seperti itu berfungsi, tetapi saya tidak bisa mengatakan caranya, dan saya akan sedikit terkejut.
Kemungkinan lain adalah dengan meletakkan perintah 'sudo / bin / su bravo' di ~ / .ssh / rc, tetapi itu akan memengaruhi semua pemasangan fs Anda (dengan asumsi itu berhasil, yang saya juga ragu) serta penggunaan ssh seperti biasa .
Maaf karena menjadi debbie downer.
sumber
Dengan deduksi, saya pikir ini tidak mungkin dicapai dalam perintah sederhana.
Ini karena sshfs memanggil ssh tanpa melewati perintah apa pun tetapi, sebaliknya, menggunakan SFTP yang merupakan subsistem dari SSH.
Dari manual sshfs :
Plus , mengubah pengguna saat ini (atau 'su' atau 'sudo') bukan bagian dari protokol SFTP, meskipun ini sepertinya fitur yang sangat sering diminta.
sumber
Mungkin, cara terbaik adalah melalui izin file, seperti yang diusulkan @artifex.
Seperti @Weboide katakan, tidak mungkin melalui sshfs.
Tapi saya kira Anda bisa membuat skrip sederhana, sebut saja itu
sudossh
yang akan membawa Anda$PWD
, konversikan ke/home/delta/
dan jalankan perintah melaluissh
dansudo
pada mesin jarak jauh.Sesuatu seperti ini:
Setelah itu Anda bisa mengeksekusi
sudossh command
dan ingat untuk menggunakan jalur relatif.Jika Anda menggunakan ssh-agent, Anda hanya perlu memasukkan
sudo
kata sandi Anda .sumber
Solusi saya adalah ngeri jelek (terima kasih kepada beberapa lapisan string melarikan diri), tetapi itu akan membaca jalan
sftp-server
dari/etc/ssh/sshd_config
dan menjalankannyasudo
. Sekarang bagaimana jikasshd_config
tidak berada di bawah/etc/ssh
? Mungkin mencari di dalamssh
biner denganstrings
dangrep
?sumber