Come faccio a iniziare in bash quando faccio shsh nel mio server?


29

Ho un server Debian ospitato. Quando accedo tramite ssh, sono accolto da un ambiente sh. Come lo cambio in modo da iniziare in un ambiente bash?

linux  bash  debian  sh 

1
Non proprio una domanda di programmazione. In futuro, probabilmente faresti meglio a porre domande come questa su Unix / Linux .
Tylerl,

Risposte:


34

Come utente normale, è possibile modificare la shell di accesso predefinita utilizzando il chshcomando Ecco un esempio:

chsh -s /bin/bash

Un'altra opzione è utilizzare usermod come root:

usermod -s /bin/bash username

1
usermod ha funzionato come un fascino. C'è un modo per impostarlo sul valore predefinito bash quando aggiungo un nuovo utente o devo eseguire il comando ogni volta?

Se lo usi adduser, dovrebbe impostarlo su bash per impostazione predefinita. L'impostazione predefinita è configurata in /etc/adduser.conf. Altrimenti, specificare esplicitamente la shell con useradd.
Giordania,

5

Si modifica /etc/passwddove l'ultima voce è la shell predefinita. Fallo /bin/bash.

In alternativa, è possibile modificare modificare l'impostazione predefinita del sistema di /bin/shnon essere bash.


1
Yo, che succede con il downvote drive-by? Ad esempio Ubuntu non lo /bin/shè /bin/dash. E per quello che vale le altre due risposte sono identiche e raggiungono lo stesso fine con mezzi diversi. Qualunque cosa.
Dirk Eddelbuettel,

4
Le modifiche manuali di /etc/passwdsono altamente scoraggiate. Un errore di modifica può interrompere gli accessi per tutti gli utenti, richiedendo il ripristino dei supporti o l'avvio in modalità utente singolo per la riparazione. Ci sono strumenti come usermodper cambiare /etc/passwd.
Giordania,

1
Senza senso. Esecuzione di Linux dal '94 qui. Mai rotto /etc/passwd.
Dirk Eddelbuettel,

2
Mi fa piacere sapere che sei stato molto attento. Non tutti hanno. Un'altra nota sul tuo aggiornamento, che si avvia /bin/bashcome /bin/shè uguale alla sua esecuzione --posix, che potrebbe avere risultati indesiderati.
Giordania,

Senti, sono uno sviluppatore / manutentore di Debian dal 1995. Avevamo di default bash, siamo passati a shell più semplici per una serie di motivi. Ho usato /bin/bashcome shell per tutti quegli anni su tutte le macchine. Hai bisogno di un argomento più concreto.
Dirk Eddelbuettel,

2

Devi modificare il tuo profilo utente, puoi farlo direttamente modificando il /etc/passwdfile o puoi usare il usermodcomando per farlo per te. La sintassi che stai cercando è simile a questa:

usermod -s /bin/bash joeuser

1

La shell di sistema predefinita /bin/shnelle recenti versioni di Ubuntu è configurata per essere /bin/dash. Eseguendo semplicemente il seguente comando:

sudo dpkg-reconfigure dash

puoi riportarlo al vecchio default di /bin/bash.

Con questo, puoi ottenere l'effetto desiderato di avere bashcome shell interattiva senza modificare le impostazioni dell'utente (no chsho usermod) e funzionerà per tutti gli utenti che attualmente hanno la shell impostata su /bin/sh.

C'è solo un piccolo aspetto negativo in questo: il tempo di avvio di Ubuntu potrebbe aumentare leggermente, perché dashrichiede meno memoria per caricarsi e leggermente più veloce per essere eseguito (non c'è da stupirsi: è così limitato nelle funzionalità). Ma penso che sarà piuttosto difficile misurare questo effetto, specialmente per l'ambiente di hosting.

Inoltre, a volte è fastidioso vedere gli script di shell che non funzionano correttamente perché utilizzano alcune bashfunzionalità avanzate che non sono supportate da dash. L'uso di questa ricetta farà in modo che ciò non accada.

Per ulteriori informazioni, vedere wiki di Ubuntu su questo problema .


dovresti tenere separati i casi d'uso: /bin/shè usato come interprete per gli script di shell compatibili con POSIX - non è necessariamente la migliore shell interattiva; se si desidera bashessere la shell di sistema, è necessario impostare la shell di accesso preferita utilizzando chsho le adduserchiamate appropriate . usare dpkg-reconfigureè una cattiva scelta se userA vuole zsh e userB vuole bash ed entrambi insistono nell'avere / bin / sh come shell predefinita.
umläute,

se userA è esplicitamente configurato su zsh, e userB su bashlo avranno. Se userC configurato sh, avrà bash, che è l'attuale impostazione predefinita di Ubuntu per i nuovi utenti
mvp

certo, ma la tua soluzione ha suggerito qualcosa come dpkg-reconfigure zshimpostare zshcome / bin / sh, e quindi dpkg-reconfigure dashimpostare dashcome / bin / sh che è una specie di deadlock; sto principalmente dicendo che è preferibilmente impostare la shell di accesso sulla shell che si desidera utilizzare piuttosto che passare attraverso i cerchi per rendere / bin / sh una buona shell di accesso.
umläute,

Ho solo detto che dpkg-reconfigure dashpuò shessere utile bash, piuttosto che paralizzato dash. Tutte le altre shell saranno ancora intatte.
mvp,

1

Nel caso in cui stai tentando di utilizzare un account condiviso (per qualsiasi motivo) e non riesci a modificare la shell predefinita, puoi eseguire

ssh -t <user@hostname> bash -l

Se è necessario mantenere l'ambiente da un'altra shell, è possibile eseguire prima quella shell; per esempio

ssh -t <user@hostname> ksh -c bash -l

Funziona abbastanza bene, ma perché l' -lopzione?
nbkhope,

@nbkhope assicurerà che .bashrc sia eseguito per te.
UKMonkey

0

chsho usermodstavano lavorando per me, ma ho scoperto che si può fare questo attraverso PuTTY.

Vai a Connection > SSHe imposta il Remote commanda bash.

Nota che non sarai in grado di accedere exitalla tua shell predefinita, chiuderà semplicemente la connessione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.