У меня есть несколько машин, и имена хостов очень длинные ... то есть имя компании-ux-staging-web1.companyname.com. Моя подсказка выглядит примерно так
[root@mycompany-ux-staging-web1 ~]#
Я хотел бы сократить это для всех пользователей на всех машинах с наименьшим объемом работы. Из того, что я прочитал, у меня есть несколько вариантов, но все они имеют свои недостатки.
Я мог бы изменить имя хоста, но это, скорее всего, повлияет на приложения. Не лучший выбор.
Я мог также изменить $ PS1 при входе в систему для всех пользователей, отредактировав все .bashrc для существующих пользователей, и отредактировав /etc/skel/.bashrc для потенциальных новых пользователей. Это большая работа на> 10 машинах.
Какой у меня лучший вариант или что я упустил из виду?
Вероятно, вам следует экспортировать PS1. Вместо того, чтобы редактировать пользовательский bashrc, вы должны отредактировать системный bashrc: пользователь должен иметь возможность переопределить приглашение по своему выбору.
Во-вторых, для распространения файла используйте scp или clusterssh. Если вы настроили ключ rsa, вам даже не нужно вводить пароль более одного раза для scp:
eval `ssh-agent`
ssh-add
for h in `cat ~/hostlist`; do
scp ~/newbashrc ${h}:/etc/bashrc
done
eval `ssh-agent -k`
вы можете создать исполняемый сценарий в каталоге /etc/profile.d/, например: /etc/profile.d/custom_prompt.sh, с таким содержимым:
#!/bin/sh
export PROMPT_COMMAND=’export PS1="[\e[0;35m][\u \t \h \W]\$ [\e[0m]"‘
При использовании этого метода вам не нужно изменять какой-либо файл, чтобы изменить приглашение bash для всех пользователей.
Отредактируйте / etc / profile
/ etc / profile запускается, когда пользователь входит в систему. ~ / .bashrc запускается для других оболочек (например, открытие xterm)
экспорт PS1 = "[\ e [0; 35m] [\ u \ t \ h \ W] \ $ [\ e [0m]»
Вы, вероятно, захотите вынуть \ h
Это не должно быть больше работы, чем любое существующее управление конфигурацией, которое вы используете для развертывания новых конфигураций на этих десяти серверах. Если это постоянная проблема для вашей организации, вы определенно захотите изучить инструмент управления конфигурацией, такой как Puppet / Chef / Cfengine, и инструмент развертывания, такой как MCollective / RunDeck / Capistrano / Fabric.
Вы можете редактировать общесистемный bashrc в / etc / bashrc, но он легко перезаписывается любым пользователем с доступом к оболочке. Вы можете легко создать сценарий для вывода нового .bashrc для списка пользователей с помощью scp.
Как указано, scp, вероятно, самый простой с простым скриптом. Другой вариант - rsync. Кроме того, вы можете просто cron сделать это с помощью ключей ssh.
Ваш второй вариант кажется возможным, если вы можете отправлять команды на все серверы одновременно для обновления файлов. Для этого вы можете использовать pssh в linux (http://code.google.com/p/parallel-ssh/) или отправителя команды PuTTY (http://www.millardsoftware.com/puttycs) с помощью PuTTY в Windows.
Вы можете создать команду sed / awk, которая могла бы заменить строку в файлах skel .bashrc и / etc / bashrc, а также в файлах пользователей bashrc. Затем отправьте это одной командой во все системы.
Команда sed, вероятно, будет наиболее трудоемкой. К сожалению, я не так хорошо разбираюсь в sed и awk. Кто-то другой может предложить больше информации в этой области. Надеюсь, эта информация поможет!
Мне пришлось сделать это для нескольких серверов ubuntu, и для всех пользователей я хотел, чтобы в приглашении отображалось полное доменное имя, а не только имя хоста (в отличие от того, что вы делали). Я обнаружил, что изменения /etc/bash.bashrc недостаточно. Я также пробовал возиться с разными файлами profile.d, но это было бесполезно, потому что домашний .bashrc всегда применяется последним.
В итоге я запустил приведенный ниже скрипт с доступностью для всех серверов, и это помогло всем пользователям и всем будущим приложениям.
#!/bin/bash
for userfolders in `ls -d /home/*/`
do
for bashfiles in `ls -1 ${userfolders}.bashrc`
do
sed -i 's|u@\\h|u@\\H|g' $bashfiles
done
done
sed -i 's|u@\\h|u@\\H|g' /etc/bash.bashrc
sed -i 's|u@\\h|u@\\H|g' /etc/skel/.bashrc
sed -i 's|u@\\h|u@\\H|g' /root/.bashrc