SSH'nın kullandığı mermiyi seçmek?


31

Bir kullanıcı bir sunucuya SSH gönderdiğinde kullanılan kabuğu nasıl ayarlarım? Mesela BASH'a dayanamıyorum ve ZSH kullanmam gerekiyor .zsh_profile, makineyi ssh yaparken ZSH'nin profilimle ( ) birlikte yüklenmesini nasıl sağlayabilirim .

Ben de ssh ile bir demet parametre geçmek zorunda istemiyorum, varsayılan kabuğu ayarlayamıyorum?

Yanıtlar:


34

Linux üzerinde çalıştığınızı varsayalım, chshkomutu kullanabilirsiniz .

chsh -s /bin/ksh foo
chsh -s /bin/bash username

4
/etc/shellsKabuğun seçilebilmesi için ikilinin yolunun içinde olması gerektiğini lütfen unutmayın .
Kimvais,

Ubuntu 16.04 bu komuta sahip değil.
david.perez

@ david.perez Evet , passwdpakette var .
tatlı

Kimlik doğrulama LDAP üzerinden gerçekleştirildiğinde bu işe yaramaz
Daniel Kats

10

man chsh kabuk değiştirir, her zaman çalışmaz

Alternatif olarak, exec /bin/zshbash giriş komutuna basabilirsiniz script.thh bash örneğini kabuğunuzla değiştirir.

Ya da yapabilirsin ssh host "zsh -l"


Neden -1 (15 karakter ...)?
Noufal Ibrahim

Bu küçük bir davaL
driftcatcher 6:15

1
ssh -tSon seçenekler için bir TTY almak için gereklidir. Varsayılan olarak bir komut (benzeri zsh -l) verilirse , OpenSSH sizin için TTY'yi tahsis etmeyecek ve oturum açmadan -lsonra yürütüldüğü için değiştirmeyecek olan oturum açma dışı bir kabuk yapar .
Franklin Yu,

8

Varsayılan kabuğunuzu değiştirmek için / etc / passwd dosyasını düzenleyin (haklarınız varsa veya sistem yöneticinizden isteyin).


Bazı nedenlerden dolayı, son zamanlarda oluşturduğum kullanıcıların varsayılan kabuğu yoktu. Bu benim için çalıştı. Teşekkürler.
mimoralea

2
Teşekkürler bu cevap harika. Burada da bir kabuğum yoktu. Myusername satırını buldum: x: 1000: 1000 :: / home / myusername: ve sonuna / bin / bash eklendi. Oturumu kapatıp açın ve ssh oturumum bash kullanıyor :)
Stewart Evans

6

Varsayılan kabuğunuzu değiştiremezseniz ssh -t user@host 'zsh -l'çalışır.

-tBayrak bir psödo-Tty tahsisi ve zorlar -lbayrak yumurtlar bir giriş kabuğu .


4

Yerel .zshrcsunucunuzu uzak sunucuya nasıl yerleştireceğinizden emin değilim (bu, orada kalıcı olarak depolanmayan), bu benim uzaktaki sunucudaki oturum açma kabuğumu değiştirmem için işe yarıyor.

Paylaşılan bir hesap olduğundan, zshbu yöntemle yalnızca kendim için kullanabilirim .

Bunu ~/.ssh/config, yerel makinenizdeki dosyaya ekleyin.

Host yourServer
    HostName <IP, FQDN or DNS resolvable name>
    IdentityFile ~/.ssh/<your keyfile>
    RemoteCommand zsh -l
    RequestTTY force
    User <yourUsername>

Aşağıdaki gibi aradığınızı başarmanın aceleci bir yolu olabilir.

UYARI Bu hiçbir garanti olmadan gelir ve 'akıllıca' görünmez, ancak yerel dosyamı sunucuya yerleştirmeyi ve bunu kullanarak giriş kabuğuna vermeyi başardım.

Host someHost
    HostName someIP
    IdentityFile ~/.ssh/somekey.pem
    RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
    PermitLocalCommand yes
    LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
    RequestTTY force
    User someUser

Nasıl çalışır?

  • RemoteCommand Uzak tarafta neyin çalıştırılması gerektiğini tanımlar.
  • LocalCommandYerel dosyayı çalıştırmak için yerel sunucunuzu uzak sunucuya kopyalamak için kullanılan yerelde neyin çalıştırılması gerektiğini tanımlar. İşte yakalama, sadece uzak ana bilgisayarla 'başarılı' bağlantıdan sonra olur.

Anlamı:

  1. Remote ile bağlantınız açık ve canlı olmalı
  2. Uzaktaki kabuğunuzda henüz dosya yok, bu yüzden dosya gelene kadar beklemesi gerekiyor, ergo sleep
  3. Yereliniz sftpdosyanızı uzak sunucuya koymak için kullanır , uzak sunucu uyanır sleepve komut dosyalarınızı sağlar.

Süper hackish, daha iyi bir yol olup olmadığını bilmek istiyorum.

Güncelleme: Bu 'uzun' uyku süresi yerine kullanılabilir:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'

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.