PS1 istemimi ssh üzerinden itme


19

Sevdiğim belirli bir "PS1" istemi kullanıyorum. Birkaç oturum açmayı birkaç farklı sunucudaki diğer insanlarla paylaşıyorum. Yerel bash profilimde bir uzak komut istemi belirtmek için bir yol olup olmadığını merak ettim ya da başka bir yol daha sonra her uzaktan girişimde kopyalayıp yapıştırma.

Yanıtlar:


17

Her bir uzak makineye, örneğin ~/.my_custom_bashrcözel bashyapılandırmanızla birlikte bir dosya yükleyin (bu durumda PS1=...) ve ardından aşağıdakileri başlatın ssh:

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

bashOkunabilirlik için bir işlevi kolayca sarmalayıcı olarak kullanabilirsiniz .


10

PS1Değişkeni göndermek istiyorsanız ve değişken '(tek tırnak) içermiyorsa , şunu deneyin:

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

Yerel olsa .bashrcda üzerine yazabilirsiniz PS1( bu işaret için Dennis Williamson sayesinde ).

Ortam değişkenlerini ssh üzerinden aktarmanın yolları vardır , ancak bunlar genellikle sunucu yapılandırmasında devre dışı bırakılır. Eğer PermitUserEnvironmentyönerge etkindir sunucu yapılandırması ve her kullanıcı (evet, bu kadar şanslı olmayabilir) kendi anahtar çiftini vardır ekleyebilir environment="PS1=…"içinde çizgisine ~/.ssh/authorized_keyssizin anahtarına karşılık gelen.

Kendi yapılandırmanızı paylaşılan bir kullanıcı hesabında tutmak istiyorsanız, kendi yapılandırma dosyası dizininizi oluşturabilir ve HOMEortam değişkenini bu dizini işaret edecek şekilde ayarlayabilirsiniz .

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

mrstatic.homeBir dosyayı diğer kullanıcılarla paylaşmak istediğinizde, dizinde üst dizindeki karşılık gelen girdiyi gösteren sembolik bağlantılar oluşturun .

Ardından,

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

Uzaktan kumandayı .profile(veya başka bir başlatma dosyasını) değiştirmek istiyorsanız, muhtemelen ayarlarınızı otomatikleştirebilirsiniz. Birçok site LC_*ortam değişkenlerine (normalde yerel ayarlar için kullanılır) izin verir . Bu koşulların her ikisi de karşılanırsa, aslında LC_USERistemci tarafında yerel ayarlar için kullanılmayan bir değişken ayarlayabilir ve bunu sunucuda test edebilirsiniz .profile.

(Elbette paylaşılan hesaplar kötü bir fikirdir, ancak bu durumu değiştirebilecek bir konumda olmayabileceğinizin farkındayım.)


3
ssh -t user@host "remote='$PS1' bash -i"

Ardından, komut isteminde:

PS1=$remote

1
Karmaşık bir bash istemi alıntılanmıyorsa kırılacaktır (sizden geliyorum, şaşırdım). Ve neden ekstra komut, sadece değil "PS1='$PS1' bash -i"(ve neden de değil exec)?
Gilles 'SO- kötü olmayı bırak'

1
@Gilles: Eksik alıntı: özensizlik. Ekstra komut: PS1kabuk başlangıcı sırasında üzerine yazılması olağandışı olmaz . Exec yok: sistemimi test ederken hiçbir fark yaratmadı - ekstra bir işlem yok.
sonraki duyuruya kadar duraklatıldı.

1
Oh, evet, bu iyi bir nokta, yerelin .bashrcüzerine yazması muhtemel PS1.
Gilles 'SO- kötü olmayı bırak'

2

PS1 isteminizi ~ / .ssh / ortamına koyun ve ssh oturumu giriş yaptığınız her ana bilgisayara taşıyacaktır. Benim için opensh 4.3p2 ile çalışıyor.


1
Bu yalnızca sunucunun yapılandırması etkinleştirilmişse çalışır ( PermitUserEnvironmentvarsayılan olarak kapalıdır).
Flimm

1

istemci tarafında ortam değişkenleri belirtebilirsiniz ve ssh-sunucusu izin veriyorsa (man sshd-config öğesini kontrol edin), makineye giriş yaptığınızda bu değişkenler oturuma kopyalanır.

bu nedenle, sunucudaki .bashrc dosyasını var olan bir PS1'i (veya herhangi bir değişkeni) kontrol edecek şekilde yapılandırmanız ve yalnızca önceden ayarlanmamışsa PS1'i ayarlamanız gerekir.

ya da işleri kolaylaştırır, ayarlarınızı bir işlev içinde toplarsınız ve bu işlevi ya kaynağınız üzerine özel bir dosya olarak ( source joes_bashrc) ya da doğrudan .bashrc'ye dağıtırsınız. kendi dosyanıza sahip olmak biraz daha sağlam görünüyor. diğer kişiler ayarlarınızı kullanabilir, ancak zorunlu değildir.


1

Giriş bilgilerini paylaşmayın. SSH'yi kendiniz gibi yapın sudo -su shareduser( -s"kabuk" anlamına gelir).

Make sudoev dizinini tutmak:

Defaults env_keep += "HOME"

Terfi ettiğimde bu politikayı yürürlüğe koyacağım ama şimdilik buna bağlı kaldım.
Fonsuz Fındık

1

Ekstra bir scp'ye ihtiyaç duymadan yapmak istiyorsanız, böyle bir şey yapabilirsiniz:

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'

Bu sunucu bashrc tabanlı ancak geçersiz kılma ile bir .bashrc.n oluşturur.


Bu yüzden bazı insanlar terminallerden korkuyor.

0

İş arkadaşlarınıza farkedilmez bir şekilde girmeye istekli iseniz ve tercihinize müdahale etmemelerine güvenebilirsiniz, o zaman cYrus'un cevabı , Akira'nın cevabı ve Dennis Williamson'ın cevabının bir kombinasyonunu öneririm .

  1. Her sunucuda düzenleyin ~/.bashrcve ekleyin
    if ["$ Unf" = 1] # Fundednut için özel kod
    sonra
        PS1 = " (istediğiniz istem) "
         (istediğiniz diğer özelleştirmeler) 
    fi
    sonunda. Meslektaşlarınız “temel profil üzerine yazmayı takdir etmeyecek olsa da”, aramaya gitmedikçe bunun farkında olmayacaklar.
  2. Uzak bir sunucuya giriş yaptığınızda,
    ssh -t user @ host "Unf = 1 bash -i"
    Muhtemelen bunu yerel hesabınızdaki bir takma ad veya kabuk işlevine koymak isteyeceksiniz, ancak diğer yanıtların herhangi birinden daha kısa - kolayca elle yazabileceğiniz kadar kısa.

Bunun oldukça açık olduğuna inanıyorum, ancak: sshkomut, Unfdeğişkenin uzak sunucuda oturum açtığınızda ayarlanmasına neden oluyor. Bu, uzaktan kumandanızdaki kodunuzu çağıracak ve .bashrcözelleştirmelerinizi yürürlüğe koyacaktır. Kodunuzu sonuna .bashrceklediğiniz için, dosyanın önceki bölümlerindeki genel ayarları geçersiz kılar.

Açıklama: Bunu test etmedim.


-1

En kolay yol IMHO'dur:

ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'

Bunun işe yaradığından emin değilim; bir tırnak katmanı eksik gibi görünüyor. Olsa bile, PROMPT_COMMAND(kabuk her komut isteminde çalıştırıldığında) ayarı bu sorunu çözmenin çok ağır bir yolu gibi görünmektedir. Ve, biraz gizemli olduğu için, bunun gerçekten nasıl çalıştığını açıklayan herhangi bir cevap var.
Scott

-2

Evinizi sshfs / nfs üzerine monte etmek gibi şeyler yapabilirsiniz, ancak en kolay çözüm bashrc'nizi yeni makineye scp etmektir. Bu aynı zamanda takma adlar ve şeyler de getirir.


Sorumda belirttiğim gibi, bu girişleri diğer insanlarla paylaşıyorum. Baz profilin üzerine yazarken beni takdir etmeyeceklerinden eminim.
Unfundednut

1
$ HOME'u NFS üzerinden bağlamak deliliktir. Sadece söylüyorum'.
Wesley Rice
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.