Tim saya bertanggung jawab atas ribuan mesin Linux / Unix, jadi tentu saja akun root "dibagikan" di antara admin. Saya lebih suka mode vi, yang lain lebih suka mode emacs.
Bagaimana saya bisa mengatur readline bash ke mode vi saat SSH masuk ke mesin apa pun, tanpa memaksa semua orang untuk menggunakan mode vi juga?
Intinya ingin memiliki efek set -o vi
setelah masuk tanpa benar-benar harus mengetik setiap kali, dan tanpa memaksakan pada orang lain (sebanyak mode emacs mengganggu saya, mode vi mengganggu mereka).
Saya tahu ini tidak akan menjadi masalah jika semua orang akan menggunakan akun mereka sendiri dengan sudo untuk mengeksekusi perintah istimewa, tetapi karena keadaan di luar kendali saya, sayangnya ini bukan pilihan.
set -o vi
sebelum memberi saya kendali atas shell.set -o vi
perintah, lalu beralih ke mode interaktif.sshd
membuat beberapa variabel lingkungan yang dapat membantu Anda menentukan siapa yang ada di ujung sana. Misalnya,SSH_CLIENT
berisi alamat IP yang menghubungkan (dan port keluar / masuk klien juga). Mengotak-atik ini~/.bashrc
memungkinkan Anda melakukan hal-hal hanya untuk Anda .Jawaban:
Berikut cara konyol untuk melakukannya, yang hanya berfungsi dengan baik dengan otentikasi kunci publik:
Pertama, pastikan bahwa mesin lokal Anda memilikinya
nc
.Kedua, masih di komputer lokal Anda, buat skrip (saya akan menyebutnya
connect-to-server
) dan letakkan di tempat yang Anda${PATH}
ketahui tentang *:Selanjutnya, modifikasi
.bashrc
pada sistem remote untuk memasukkan suatu tempat:Akhirnya, kembali ke mesin lokal Anda, edit
~/.ssh/config
untuk menambahkan:Kelemahan dari pendekatan ini (dan mengapa saya menyebutnya konyol):
.yourname
file tersebut belum dihapus, dalam hal ini mereka mendapatkanset -o vi
juga.ssh serverNickname command
, makacommand
akan berjalan, tetapi (karena.bashrc
tidak pernah bersumber).yourname
file tetap, jadi akan sopan untuk memiliki alias kedua di konfigurasi ssh Anda yang tidak menggunakan pseudo-proxy.Bahkan, satu - satunya keuntungan dari pendekatan ini adalah bahwa
ssh
perintah Anda tidak perlu diberikan argumen tambahan.* Jika Anda tidak ingin mengubah apa pun pada sistem jarak jauh, berikut ini adalah pseudo-proxy alternatif yang membuat sementara
.bashrc
:Ini memiliki semua kelemahan yang sama dari metode lain, jadi Anda masih menginginkan alias kedua dalam
ssh
konfigurasi Anda yang tidak memanggil pseudo-proxy.sumber
Saya akan pergi untuk:
tetapi jika Anda seorang admin, Anda dapat mencoba sesuatu yang lebih bersih. Misalnya, Anda dapat menggunakan
SendEnv
opsi ssh di sisi klien untuk mengirimkan variabel tertentu, gunakanAcceptEnv
dalamsshd
konfigurasi (sisi server) untuk menerimanya, dan berdasarkan ini, modifikasi.bashrc
file root untuk menyesuaikan perilaku sesuai dengan nilai variabel.Ini menyiratkan untuk mengubah
sshd
konfigurasi pada semua host serta mereka.bashrc
. Bukan cara yang "mandiri" untuk dilakukan, namun ...sumber
Untuk solusi sisi klien yang mudah:
Ini akan gagal jika skrip inisialisasi shell root secara eksplisit menggunakan
set -o emacs
atau menyetelEDITOR
keemacs
, atau jika.initrc
file root memanggilemacs
binding kunci.Sisa jawaban ini menyangkut solusi sisi server.
Ini berfungsi saat Anda
ssh
masuk ke mesin dan kemudian menggunakansudo -i
:Untuk Anda
/root/.bashrc
:Ini memungkinkan Anda memiliki
bashrc
file pribadi yang disebut di/root/.bashrc-patrick
mana Anda dapat melakukan apa pun yang Anda sukaset -o vi
.Menggabungkan ini dengan pendekatan yang agak naif untuk mengambil file rc tergantung pada
$SSH_CLIENT
:Ini jelas hanya berfungsi jika Anda terhubung dari alamat IP yang sama sepanjang waktu ...
Pendekatan lain yang menggunakan bidang komentar kunci SSH tertentu yang Anda gunakan, yang berfungsi jika Anda meneruskan agen SSH ke server:
Ini memilih bidang komentar untuk kunci yang Anda gunakan untuk terhubung ke server. Apakah
head -n 1
ada kalau-kalau Anda memiliki beberapa kunci Anda dalamauthorized_keys
file.Anda kemudian dapat menggunakan
$ssh_comment
untuk mengambil file rc ke sumber, baik secara langsung seperti dengan$SUDO_USER
pendekatan di atas (di mana komentar di$ssh_comment
mungkin perlu menjalani beberapa pembersihan jika itu nama path), atau melaluicase
pernyataan seperti dengan$SSH_CLIENT
pendekatan.sumber
SSH_CLIENT
danSUDO_USER
apa yang saya gunakan saat ini, tetapi membutuhkan modifikasi sisi server dan itu tidak terlalu dapat diandalkan. Saya berharap untuk solusi sisi klien murni. Terima kasih atas sarannya.Jika Anda benar-benar ingin melakukannya tanpa modifikasi di sisi server, baik:
1) Jalankan sesuatu seperti
Saya tidak berpikir dokumentasi terlalu jelas tentang itu, tetapi
-o option
disebutkan, dan tampaknya berhasil.2) Gunakan harapkan:
The
expect
Script:Jadikan itu dapat dieksekusi dan jalankan:
Ini mengasumsikan Anda dapat masuk tanpa memasukkan kata sandi (untuk host jarak jauh atau untuk kunci Anda), jika tidak, skrip harapan harus mempertimbangkannya. Tetapi dengan banyak mesin Anda cenderung sudah memilikinya. Juga, saya mengharapkan tanda dolar dan spasi, sunting yang sesuai dengan prompt Anda:
"# "
mungkin.Meskipun jika sesuatu yang dicetak sebelum prompt menyertakan karakter yang sama, Anda harus memasukkan sesuatu yang lebih spesifik dalam string yang diharapkan.
Juga, skrip itu tidak mendukung memberikan argumen tambahan
ssh
. Jika Anda akan memberikan perintah eksplisit untuk dijalankan, Anda mungkin tidak perlu mode-vi, tetapi jika Anda perlu mengatakan tunneling port, itu mungkin menjadi masalah.Tetapi bagaimanapun juga, saya benar-benar berpikir ini harus diselesaikan pada sistem target dengan akun terpisah (
sudo
atau hanya UID 0 lama). Konfigurasi yang dipersonalisasi juga akan berguna untuk banyak kasus lain, dan secara umum Anda akan memiliki banyak file konfigurasi dan variabel lingkungan yang ingin Anda atur. (Pertimbangkan bahwa admin mungkin tidak menyetujui nilai$EDITOR
, atau kontenvirc
atau apa pun.)Menghapus pengguna juga akan lebih mudah dengan akun terpisah.
Segala cara untuk menyinkronkan file pada semua host juga akan menyelesaikan masalah ini dengan memungkinkan Anda untuk masuk dengan sesuatu seperti
ssh -t user@host 'patricks_shell.sh'
ataussh -t user@host 'bash --rcfile patrick.rc'
.sumber
interact
. Itu tidak ada, prompt mungkin jauh berbeda, seperti motd / output dari profil. Terima kasih untuk sarannya.Anda dapat memiliki file rc khusus mengikuti panduan ini:
File rc pengguna | Secure Shell: Panduan Definitif
atau menyuntikkan tindakan baris perintah dalam fileotorisasi Anda:
Konfigurasi SSH otomatis menjalankan perintah jauh | Unix & Linux Stack Exchange
sumber