У меня есть сервер Debian. Когда я вхожу через ssh, меня приветствует окружение sh. Как я могу изменить это, чтобы я начал в среде bash?
У меня есть сервер Debian. Когда я вхожу через ssh, меня приветствует окружение sh. Как я могу изменить это, чтобы я начал в среде bash?
Ответы:
Как обычный пользователь, вы можете изменить оболочку входа по умолчанию, используя chsh
команду. Вот пример:
chsh -s /bin/bash
Другой вариант - использовать usermod от имени root:
usermod -s /bin/bash username
adduser
, он должен установить его на bash по умолчанию. По умолчанию настроено в /etc/adduser.conf
. В противном случае укажите оболочку явно с useradd
.
Вы редактируете, /etc/passwd
где последняя запись является оболочкой по умолчанию. Сделай это /bin/bash
.
Кроме того, вы можете изменить системное значение по умолчанию, чтобы /bin/sh
не быть bash.
/bin/sh
является /bin/dash
. И для чего это стоит, два других ответа идентичны и достигают одного и того же результата разными способами. Без разницы.
/etc/passwd
крайне не рекомендуется. Ошибка редактирования может привести к сбою имен входа для всех пользователей, для восстановления которых требуется носитель для восстановления или загрузка в однопользовательском режиме. Есть такие инструменты, как usermod
для изменения /etc/passwd
.
/etc/passwd
.
/bin/bash
так /bin/sh
же, как и его выполнение --posix
, которое может привести к нежелательным результатам.
/bin/bash
Все эти годы я использовал в качестве оболочки все машины. Вам нужен более конкретный аргумент.
Системная оболочка /bin/sh
по умолчанию в последних выпусках Ubuntu настроена так /bin/dash
. Просто запустив следующую команду:
sudo dpkg-reconfigure dash
Вы можете изменить его обратно на старый по умолчанию /bin/bash
.
Благодаря этому вы можете добиться желаемого эффекта использования bash
интерактивной оболочки без изменения каких-либо пользовательских настроек (нет chsh
или usermod
), и это будет работать для всех пользователей, для которых в данный момент установлена оболочка /bin/sh
.
Есть только один маленький недостаток: время загрузки Ubuntu может немного увеличиться, потому что dash
для загрузки требуется меньше памяти и немного быстрее для запуска (неудивительно - она настолько ограничена в функциях). Но я думаю, что измерить этот эффект будет довольно сложно, особенно для среды хостинга.
Кроме того, иногда раздражает видеть сценарии оболочки, которые не работают должным образом, потому что они используют некоторые bash
расширенные функции, которые не поддерживаются dash
. Используя этот рецепт, вы убедитесь, что этого не произойдет.
Для получения дополнительной информации см. Вики Ubuntu об этой проблеме .
/bin/sh
используется как интерпретатор для POSIX-совместимых сценариев оболочки - это не обязательно лучшая интерактивная оболочка; если вы хотите bash
быть системной оболочкой, вам следует установить предпочитаемую оболочку входа в систему, используя chsh
или соответствующие adduser
вызовы. использование dpkg-reconfigure
- плохой выбор, если userA хочет zsh, а userB хочет bash и оба настаивают на том, чтобы / bin / sh использовалась в качестве оболочки по умолчанию.
zsh
, и userB для bash
них он будет иметь. Если userC настроен на sh
, он будет иметь bash
, что в любом случае является текущим значением по умолчанию Ubuntu для новых пользователей
dpkg-reconfigure zsh
установить что-то вроде zsh
/ bin / sh, а затем dpkg-reconfigure dash
установить dash
/ bin / sh, что является своего рода тупиком; Я в основном говорю, что предпочтительно установить оболочку входа в систему в оболочку, которую вы хотите использовать, а не проходить через обручи, чтобы сделать / bin / sh хорошей оболочкой входа.
dpkg-reconfigure dash
может сделать sh
точку bash
, а не калека dash
. Все остальные снаряды останутся нетронутыми.
Если вы пытаетесь использовать общую учетную запись (по какой-либо причине) и не можете изменить оболочку по умолчанию, вы можете запустить
ssh -t <user@hostname> bash -l
Если вам нужно защитить свою среду от какой-либо другой оболочки, то вы можете сначала запустить эту оболочку; например
ssh -t <user@hostname> ksh -c bash -l
-l
вариант?