Bagaimana cara saya memulai di bash ketika ssh'ing ke server saya?

29

Saya memiliki server Debian yang dihosting. Ketika saya masuk melalui ssh, saya disambut dengan lingkungan sh. Bagaimana cara mengubahnya jadi saya mulai di lingkungan bash?


sumber
1
Bukan pertanyaan pemrograman. Di masa depan, Anda mungkin sebaiknya mengajukan pertanyaan seperti ini di Unix / Linux .
tylerl

Jawaban:

34

Sebagai pengguna biasa, Anda dapat mengubah shell login default menggunakan chshperintah. Berikut ini sebuah contoh:

chsh -s /bin/bash

Opsi lain adalah menggunakan usermod sebagai root:

usermod -s /bin/bash username
jordanm
sumber
1
usermod bekerja seperti pesona. Apakah ada cara untuk mengaturnya ke default untuk bash ketika saya menambahkan pengguna baru, atau apakah saya harus menjalankan perintah setiap kali?
Jika Anda menggunakan adduser, itu harus mengaturnya ke bash secara default. Defaultnya dikonfigurasi dalam /etc/adduser.conf. Jika tidak, tentukan shell secara eksplisit dengan useradd.
jordanm
5

Anda mengedit di /etc/passwdmana entri terakhir adalah shell default. Buat itu /bin/bash.

Atau, Anda dapat mengubah mengubah default sistem untuk /bin/shtidak menjadi bash.

Dirk Eddelbuettel
sumber
1
Yo, ada apa dengan downvote drive-by? Misalnya Ubuntu tidak default /bin/shmenjadi /bin/dash. Dan untuk apa itu layak, dua jawaban lainnya identik dan mencapai tujuan yang sama dengan cara yang berbeda. Terserah.
Dirk Eddelbuettel
4
Pengeditan manual /etc/passwdsangat tidak disarankan. Kesalahan pengeditan dapat merusak login untuk semua pengguna, membutuhkan media pemulihan atau boot ke mode pengguna tunggal untuk diperbaiki. Ada alat seperti usermoduntuk mengubah /etc/passwd.
jordanm
1
Omong kosong. Menjalankan Linux sejak '94 di sini. Tidak pernah rusak /etc/passwd.
Dirk Eddelbuettel
2
Senang mendengar Anda sangat berhati-hati. Tidak semua orang memilikinya. Catatan lain update Anda, meluncurkan /bin/bashsebagai /bin/shsama dijalankan dengan --posix, yang mungkin memiliki hasil yang tidak diinginkan.
jordanm
Begini, saya sudah menjadi pengembang / pengelola Debian sejak 1995 juga. Kami dulu menggunakan bash sebagai default, kami beralih ke shell yang lebih sederhana karena berbagai alasan. Saya telah menggunakan /bin/bashshell saya selama bertahun-tahun di semua mesin. Anda membutuhkan argumen yang lebih konkret.
Dirk Eddelbuettel
2

Anda perlu mengedit profil pengguna Anda, Anda dapat melakukan ini secara langsung dengan mengedit /etc/passwdfile, atau Anda dapat menggunakan usermodperintah untuk melakukannya untuk Anda. Sintaks yang Anda cari terlihat seperti ini:

usermod -s /bin/bash joeuser
tylerl
sumber
1

Cangkang sistem default /bin/shdi rilis Ubuntu terbaru dikonfigurasikan menjadi /bin/dash. Dengan hanya menjalankan perintah berikut:

sudo dpkg-reconfigure dash

Anda dapat mengubahnya kembali ke default lama /bin/bash.

Dengan ini, Anda dapat mencapai efek yang diinginkan bashsebagai shell interaktif tanpa mengubah pengaturan pengguna apa pun (tidak chshatau usermod), dan itu akan berfungsi untuk semua pengguna yang saat ini memiliki shell yang diatur ke /bin/sh.

Hanya ada satu kelemahan kecil untuk ini: Waktu boot Ubuntu mungkin sedikit meningkat, karena dashmembutuhkan lebih sedikit memori untuk dimuat dan sedikit lebih cepat untuk dijalankan (tidak heran - fitur ini sangat terbatas). Tapi saya pikir ini akan agak sulit untuk mengukur efek ini, terutama untuk lingkungan hosting.

Juga, terkadang menjengkelkan melihat skrip shell yang gagal berfungsi dengan baik karena mereka menggunakan beberapa bashfitur canggih yang tidak didukung oleh dash. Menggunakan resep ini akan memastikan ini tidak akan terjadi.

Untuk informasi lebih lanjut, lihat wiki Ubuntu tentang masalah ini .

mvp
sumber
Anda harus memisahkan use case: /bin/shdigunakan sebagai interpreter untuk skrip shell yang kompatibel dengan POSIX - itu belum tentu merupakan shell interaktif terbaik; jika Anda ingin bashmenjadi shell sistem Anda, Anda harus mengatur shell login pilihan Anda menggunakan chshatau adduserpanggilan yang tepat . menggunakan dpkg-reconfigureadalah pilihan yang buruk jika userA ingin zsh dan userB ingin bash dan keduanya bersikeras memiliki / bin / sh sebagai shell default mereka.
umläute
jika userA dikonfigurasikan secara eksplisit ke zsh, dan userB untuk bashmereka akan memilikinya. Jika userC dikonfigurasi untuk sh, ia akan memiliki bash, yang merupakan standar Ubuntu saat ini untuk pengguna baru
mvp
tentu, tetapi solusi Anda menyarankan sesuatu seperti dpkg-reconfigure zshdiatur zshsebagai / bin / sh, dan kemudian dpkg-reconfigure dashditetapkan dashsebagai / bin / sh yang merupakan semacam jalan buntu; Saya terutama mengatakan bahwa lebih disukai untuk mengatur shell login ke shell yang ingin digunakan daripada melalui lingkaran untuk membuat / bin / sh shell login yang baik.
umläute
Saya hanya mengatakan itu dpkg-reconfigure dashbisa shmenunjukkan bash, bukan melumpuhkan dash. Semua kerang lainnya masih utuh.
mvp
1

Untuk kasus di mana Anda mencoba menggunakan akun bersama (untuk alasan apa pun) dan tidak dapat mengubah shell default, maka Anda dapat menjalankannya

ssh -t <user@hostname> bash -l

Jika Anda perlu menjaga lingkungan Anda dari beberapa shell lain, maka Anda dapat menjalankan shell itu terlebih dahulu; sebagai contoh

ssh -t <user@hostname> ksh -c bash -l
UKMonkey
sumber
Itu bekerja dengan cukup baik, tetapi mengapa ada -lpilihan?
nbkhope
@ nbkhope itu akan memastikan bahwa .bashrc dijalankan untuk Anda.
UKMonkey
0

Baik chshatau usermodsedang bekerja untuk saya, tetapi saya menemukan bahwa Anda dapat melakukan ini melalui Putty.

Pergi ke Connection > SSHdan atur Remote commandke bash.

Perhatikan bahwa Anda tidak akan dapat ke exitshell default Anda, itu hanya akan menutup koneksi.

Chris
sumber