Mendorong prompt PS1 saya ke ssh

19

Saya menggunakan prompt "PS1" tertentu yang saya suka. Saya membagikan beberapa login dengan orang lain di beberapa server yang berbeda. Saya bertanya-tanya apakah ada cara untuk menentukan di profil bash lokal saya prompt jarak jauh, atau cara lain selain menyalin dan menempelkan setiap kali saya remote masuk.

Kacang tidak didanai
sumber

Jawaban:

17

Unggah file di setiap mesin jarak jauh, katakanlah ~/.my_custom_bashrc, dengan bashkonfigurasi khusus Anda , (dalam hal ini PS1=...) kemudian jalankan sshdengan:

ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"

Anda dapat dengan mudah menggunakan bashfungsi sebagai pembungkus untuk keterbacaan.

cYrus
sumber
10

Jika Anda hanya ingin mengirim PS1variabel, dan itu tidak mengandung '(kutipan tunggal), cobalah:

ssh targethost -t "PS1='$PS1'; exec bash"

Penduduk lokal .bashrcmungkin akan menimpa PS1(terima kasih kepada Dennis Williamson karena menunjukkan hal ini).

Ada beberapa cara untuk mengirimkan variabel lingkungan melalui ssh , tetapi biasanya dinonaktifkan di konfigurasi server. Jika PermitUserEnvironmentarahan diaktifkan dalam konfigurasi server dan setiap pengguna memiliki pasangan kunci sendiri (ya, Anda mungkin tidak seberuntung itu), Anda dapat menambahkan environment="PS1=…"ke baris ~/.ssh/authorized_keyssesuai dengan kunci Anda.

Jika Anda ingin menyimpan konfigurasi Anda sendiri di akun pengguna bersama, Anda dapat membuat direktori file konfigurasi Anda sendiri dan mengatur HOMEvariabel lingkungan untuk menunjuk ke direktori itu.

ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/

Buat tautan simbolik di mrstatic.homedirektori yang menunjuk ke entri yang sesuai di direktori induk ketika Anda ingin berbagi file dengan pengguna lain.

Lalu, masuk dengan

ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`

Jika Anda ingin memodifikasi remote .profile(atau file inisialisasi lainnya), Anda mungkin dapat mengotomatiskan pengaturan Anda. Banyak situs mengizinkan LC_*variabel lingkungan melalui (biasanya mereka digunakan untuk pengaturan lokal). Jika kedua kondisi ini terpenuhi, Anda dapat mengatur variabel yang sebenarnya tidak digunakan untuk lokal, katakanlah LC_USER, di sisi klien, dan mengujinya di server .profile.

(Tentu saja akun bersama adalah ide yang buruk, tetapi saya menyadari Anda mungkin tidak berada dalam posisi untuk mengubah situasi itu.)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
ssh -t user@host "remote='$PS1' bash -i"

Kemudian, saat diminta:

PS1=$remote
Dijeda sampai pemberitahuan lebih lanjut.
sumber
1
Bash prompt yang canggih kemungkinan akan rusak jika tidak dikutip (datang dari Anda, saya terkejut). Dan mengapa perintah tambahan, dan bukan hanya "PS1='$PS1' bash -i"(dan mengapa tidak execjuga)?
Gilles 'SO- stop being evil'
1
@Gilles: Tidak ada kutipan: kecerobohan. Perintah tambahan: tidak biasa PS1ditimpa selama shell startup. No exec: selama pengujian pada sistem saya sepertinya tidak ada bedanya - tidak ada proses tambahan.
Dijeda sampai pemberitahuan lebih lanjut.
1
Oh, ya, itu poin yang bagus, orang lokal .bashrccenderung menimpa PS1.
Gilles 'SO- stop being evil'
2

Masukkan prompt PS1 Anda di ~ / .ssh / environment dan sesi ssh akan membawanya ke setiap host yang Anda masuki. Ini bekerja untuk saya dengan openssh 4.3p2.

Valmik
sumber
1
Ini hanya berfungsi jika konfigurasi server telah diaktifkan PermitUserEnvironment, yang dinonaktifkan secara default.
Flimm
1

Anda dapat menentukan variabel lingkungan di sisi klien dan jika ssh-server memungkinkannya (periksa man sshd-config), variabel-variabel ini disalin ke sesi ketika Anda masuk ke mesin.

jadi, Anda harus mengkonfigurasi .bashrc di server untuk memeriksa PS1 yang ada (atau variabel apa pun) dan hanya mengatur PS1 jika belum diatur.

atau, yang membuat segalanya lebih sederhana, Anda menggabungkan pengaturan Anda menjadi sebuah fungsi .. dan menyebarkan fungsi itu baik sebagai file khusus sumber Anda sesuai permintaan ( source joes_bashrc) atau langsung ke .bashrc. memiliki file Anda sendiri tampaknya sedikit lebih kuat. orang lain mungkin menggunakan pengaturan Anda tetapi tidak dipaksa untuk melakukannya.

akira
sumber
1

Jangan bagikan login. SSH seperti dirimu sendiri, lalu lakukan sudo -su shareduser( -sberarti "shell").

Jadikan sudodirektori home Anda:

Defaults env_keep += "HOME"
pengguna1686
sumber
Ketika saya dipromosikan saya akan mencoba dan memberlakukan kebijakan itu tetapi untuk sekarang saya terjebak dengan ini.
Unfundednut
1

Jika Anda ingin melakukannya tanpa memerlukan scp tambahan, Anda dapat melakukan sesuatu seperti ini:

ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'

Itu akan menghasilkan .bashrc.n yang didasarkan pada server bashrc tetapi dengan penggantian Anda.

neuron
sumber
Inilah sebabnya sebagian orang takut terminal.
0

Jika Anda bersedia untuk mengganggu kentara pada rekan-rekan Anda, dan Anda dapat mempercayai mereka untuk tidak mengganggu preferensi Anda, maka saya sarankan kombinasi jawaban Cyrus , jawaban akira ini dan jawaban Dennis Williamson .

  1. Di setiap server, edit ~/.bashrcdan tambahkan
    if ["$ Unf" = 1] # Kode khusus untuk Unfundednut
    kemudian
        PS1 = " (prompt yang Anda inginkan) "
         (kustomisasi lain yang Anda inginkan) 
    fi
    pada akhirnya. Meskipun kolega Anda “tidak akan menghargai [Anda] menulis di atas profil dasar”, mereka tidak akan menyadari hal ini kecuali mereka mencarinya.
  2. Saat Anda masuk ke server jarak jauh, lakukan
    ssh -t user @ host "Unf = 1 bash -i"
    Meskipun Anda mungkin ingin memasukkannya ke fungsi alias atau shell di akun lokal Anda, ini cukup singkat - lebih pendek dari jawaban lainnya - bahwa Anda dapat dengan mudah mengetiknya secara manual.

Saya percaya bahwa ini cukup jelas, tetapi: sshperintah menyebabkan Unfvariabel diatur pada server jauh ketika Anda masuk ke dalamnya. Itu akan memanggil kode Anda di remote .bashrc, yang akan membuat kustomisasi Anda berlaku. Karena Anda meletakkan kode Anda di akhir .bashrc, itu akan menimpa pengaturan umum sebelumnya dalam file.

Pengungkapan: Saya belum menguji ini.

Scott
sumber
-1

Cara termudah adalah IMHO:

ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'
Matias Barrios
sumber
Saya tidak yakin itu berhasil; tampaknya tidak ada lapisan tanda kutip. Bahkan jika itu terjadi, pengaturan PROMPT_COMMAND(yang dijalankan setiap kali shell mengeluarkan prompt) tampaknya menjadi cara yang sangat berat untuk menyelesaikan masalah ini. Dan, karena ini agak misterius, jawaban apa pun yang menyarankannya harus memiliki penjelasan tentang cara kerjanya.
Scott
-2

Anda bisa melakukan hal-hal seperti memasang rumah Anda di sshfs / nfs, tetapi solusi termudah adalah dengan scp bashrc Anda menyeberang ke mesin baru. Ini juga membawa alias dan barang.

Dentrasi
sumber
Seperti yang saya nyatakan dalam pertanyaan saya, saya membagikan info masuk ini dengan orang lain. Saya yakin mereka tidak akan menghargai saya menulis di profil dasar.
Unfundednut
1
Memasang $ HOME lebih dari NFS adalah gila. Katakan saja.
Wesley Rice