Gunakan shell yang tidak diinstal pada mesin jarak jauh

9

Dengan skenario:

  • Mesin jarak jauh : server SSH; pengguna tidak memiliki hak admin;
  • Mesin lokal : klien SSH; pengguna memiliki hak admin.

Jika pengguna , masuk ke remote dari lokal , ingin berinteraksi dengan remote menggunakan shell yang tidak diinstal pada remote , bagaimana pengguna bisa melakukannya sendiri?

Contoh: pengguna menggunakan ikan di lokal , dan ingin juga menggunakannya di jarak jauh , tetapi jarak jauh hanya memiliki bash dan zsh yang diinstal.

sampablokuper
sumber
1
@ mikeserv, terima kasih. Tidak dapat memahami ajakan untuk menurunkan suara, yang saya anggap sebagai cliquy dan exclusionist. Saya tidak punya masalah dengan perubahan tag, tapi saya mengambil pengecualian untuk pertanyaan saya diformat ulang dengan cara yang mengurangi kejelasan. Saya tidak menggunakan obrolan, jadi tidak bisa membahasnya di sana.
sampablokuper
penyalahgunaan dari huruf tebal adalah sulit dibaca . Dan kalimat hilang banyak kata.
Gilles 'SO- stop being evil'
2
@sampablokuper Anda telah menggunakan huruf tebal untuk menekankan pada titik yang sulit dibaca; lebih jauh, Anda mendekati ketika semuanya ditekankan, tidak ada.
derobert
1
@Gilles, tidak ada kalimat dalam pertanyaan saya yang hilang kata-kata, baik.
sampablokuper
1
@derobert untuk klasifikasi (dan karenanya kejelasan), seperti halnya banyak buku teks komputasi. Ada tiga sistem yang berinteraksi dalam pertanyaan saya, dan nama mereka (atau, jika Anda lebih suka, referensi untuk mereka) ada dalam huruf tebal. Yang tidak penting adalah huruf tebal. Sebelum seseorang bertanya (maksud saya, sungguh! Saya sudah diminta untuk membenarkan pilihan format yang dapat dipahami dengan sempurna!), Ya, salah satu sistem adalah manusia dan dua lainnya bukan-manusia. Dan Gilles, terima kasih, tapi tidak, saya tidak bermaksud menggunakan pemformatan kode. Saya lebih suka menggunakan pemformatan kode hanya untuk perintah atau kode, yang tidak ada dalam pertanyaan saya.
sampablokuper

Jawaban:

6

Pasang cangkang favorit Anda pada mesin jarak jauh. Anda tidak memerlukan hak administrator untuk melakukan itu, Anda dapat menginstal program di direktori home Anda, hanya saja kurang nyaman. Lihat Instalasi pada debian 5 32-bit tanpa menjadi root , Bagaimana cara menginstal program secara lokal tanpa hak akses sudo? , Melacak program dan pertanyaan lain .

Jika Anda ingin secara otomatis login ke shell yang Anda instal sendiri daripada yang default, lihat Membuat shell default zsh tanpa akses root

Jika semua yang ingin Anda lakukan adalah memanipulasi file jarak jauh, Anda dapat menggunakan SSHFS untuk memasang pohon direktori jarak jauh pada mesin lokal Anda.

mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/

fusermount -u ~/remote.d

Jika Anda tidak memiliki ruang di direktori home Anda atau itu adalah akun bersama, Anda dapat melakukan pengaturan terowongan SSH terbalik dan me-mount pohon direktori lokal Anda pada mesin jarak jauh dengan SSHFS , dengan asumsi bahwa kedua mesin menjalankan arsitektur yang sama ( varian unix yang sama pada tipe prosesor yang sama). Jika kedua mesin memiliki arsitektur yang tidak kompatibel, Anda bahkan dapat menginstal program untuk arsitektur jarak jauh di direktori home Anda. Ini mungkin tidak nyaman karena Anda harus mengatur jalur dengan benar agar program dapat menemukan pustaka, file konfigurasi, dan file data lainnya.

Emacs ini eshell kompatibel dengan Tramp : jika Anda mengubah ke direktori terpencil di Eshell, Anda akan mengeksekusi perintah pada mesin remote.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3

Jawaban sederhana: Tidak, Anda tidak dapat menggunakan pada kotak jauh program yang tidak diinstal pada kotak jauh.

Penanganan masalah: Anda tidak perlu hak admin untuk menginstal shell pada sistem jarak jauh. Anda dapat menginstalnya di direktori home Anda, tetapi mungkin Anda harus mengompilasinya dari sumber. Biasanya menggunakan sesuatu seperticonfigure --prefix=${HOME}/local

Catatan terakhir: Anda tidak dapat mengubah shell default Anda menjadi yang non "resmi" (lihat /etc/shells) tetapi Anda dapat memasukkan sesuatu seperti exec fishdi.bashrc

andcoz
sumber
2

Pengguna dapat menggunakan sshfs untuk memasang remote $ HOME-nya di mesin lokalnya. Dalam skenario seperti itu, pengguna tidak akan menggunakan cangkang pilihannya pada mesin jarak jauh secara langsung tetapi, tetap, lebih baik daripada tidak sama sekali.

Arkadiusz Drabczyk
sumber
2

Pendekatan dasar adalah menyalin shell yang dapat dieksekusi ke remote host menggunakan scpkemudian jalankan dengan menggunakan ssh, misalnya

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

The -tdiperlukan agarssh mengalokasikan sebuah tty, yang tidak akan melakukan secara default ketika menjalankan perintah remote.

Ini mengasumsikan host jarak jauh Anda menjalankan sistem operasi yang sama. Jika tidak, Anda ingin mengetahui sistem operasi jarak jauh, dan kompilasi biner (mungkin statis) yang dapat Anda salin.

Mikel
sumber
2

Jawaban yang jelas, "instal perintah pada mesin jarak jauh", adalah solusi yang paling bersih, jadi kita tidak boleh mengabaikannya:

Jika ini memungkinkan untuk menginstal perintah sebagai root, misalnya dengan
sudo apt-get install fish,
perintah dapat dijalankan seperti ini:

ssh remote -t fish


Pertanyaannya adalah tentang apa yang harus dilakukan ketika kita tidak dapat menginstal perintah pada komputer jarak jauh.
Atau lebih spesifik, ini tentang kasus kita tidak dapat menginstal perintah sebagai root .
Itu tidak berarti kita tidak dapat menginstal sama sekali!

Apa yang masih mungkin adalah menginstal perintah di dalam direktori home dengan membangunnya dari sumber .

Ini memiliki keuntungan karena menangani semua file dukungan terkait yang mungkin datang dengan perintah, dan bagaimana program menemukan mereka. Dalam fishcontoh shell, ini adalah fungsi penyelesaian dll, semua tidak tersedia jika kita hanya menyalin fishbiner.

Membangun perintah dari sumber membutuhkan alat pengembangan dan file pengembangan dari perpustakaan yang digunakan, yang mungkin terlalu rumit.

Tetapi banyak program datang dengan semua yang mereka butuhkan dibundel dalam sumber, sehingga mungkin mudah. Sulit dikatakan sebelumnya, tetapi orang bisa mencoba.

Untuk menginstal perintah ke direktori home, configuredisediakan jalur untuk menginstal - yang perlu diperiksa dalam instruksi build. Misalnya:

mkdir ~/local
./configure --prefix=~/local 
make
make install

Catatan itu tidak sudo make installseperti biasa - seperti itu adalah seluruh titik menginstal secara lokal untuk tidak perlu sudo di sini.

Untuk informasi umum tentang menginstal program dari sumber, lihat askubuntu.SE: Bagaimana cara saya menginstal file .tar.gz (atau .tar.bz2)?

Volker Siegel
sumber
0

Saya tidak berpikir Anda dapat menjalankan shell yang ada di satu mesin di yang lain. Satu-satunya cara untuk menjalankannya pada mesin jarak jauh adalah menginstalnya.

env_explosion
sumber