我有几台机器和主机名是真的很长..即companyname-ux-staging-web1.companyname.com。 所以我的提示看起来像
[root@mycompany-ux-staging-web1 ~]#
我想尽可能缩短所有机器上所有用户的工作量。 从我读到的我有几个select,但他们都有他们的缺点。
我可以更改主机名,但这可能会影响应用程序。 不是一个很好的select。
我可以通过编辑现有用户的所有.bashrc,并为潜在的新用户编辑/etc/skel/.bashrc,在login时为所有用户更改$ PS1。 在10台以上的机器上,这是很多的工作。
我最好的select是什么,或者我忽略了什么?
你应该可能导出PS1。 编辑用户的bashrc,而不是编辑系统的bashrc:用户应该能够覆盖他们的select提示。
其次,分配文件使用scp或clusterssh。 如果您设置了一个rsa密钥,那么您甚至不需要为scpinput一次以上的密码:
eval `ssh-agent` ssh-add for h in `cat ~/hostlist`; do scp ~/newbashrc ${h}:/etc/bashrc done eval `ssh-agent -k`
它不应该比您用来在这十台服务器上部署新configuration的任何现有configurationpipe理工作更多。 如果这对于你的组织来说是一个持续的问题,那么你肯定希望看一下像Puppet / Chef / Cfengine这样的configurationpipe理工具和像MCollective / RunDeck / Capistrano / Fabric这样的部署工具。
编辑/ etc / profile
/ etc / profile在用户login时运行。〜/ .bashrc为其他shell运行(例如,打开一个xterm)
导出PS1 =“[\ e [0; 35m] [\ u \ t \ h \ W] \ $ [\ e [0m]”
你可能会想要拿出\ h
你可以在/ etc / bashrc中编辑全系统的bashrc,但是很容易被shell访问的用户覆盖。 你可以很容易地编写脚本来使用scp为用户列表推出一个新的.bashrc。
如上所述,scp可能是最简单的脚本。 另一个select是rysnc。 另外,你可以使用sshkeys来做cron。
您可以在/etc/profile.d/目录中创build一个可执行脚本,例如:/etc/profile.d/custom_prompt.sh,包含以下内容:
#!/bin/sh export PROMPT_COMMAND='export PS1="[\e[0;35m][\u \t \h \W]\$ [\e[0m]"'
使用这种方法,您无需修改任何文件即可更改所有用户的bash提示。
如果您可以一次向所有服务器发送命令来更新文件,则您的第二个选项似乎是可行的。 为此,您可以在Linux上使用pssh( http://code.google.com/p/parallel-ssh/ )或在PuTTY上使用PuTTY Command Sender( http://www.millardsoftware.com/puttycs )。
你可以build立一个sed / awk命令来replaceskel .bashrc和/etc/bashrc和用户bashrc文件中的行。 然后把这个作为一个命令发送给所有的系统。
sed命令将可能是最多的工作。 不幸的是,我不像sed和awk那么好。 其他人可能会在这方面提供更多的见解。 希望这个信息有帮助!
我必须为多个Ubuntu服务器和所有用户这样做,我想在提示符上有完整的FQDN,而不是主机名(与您所做的相反)。 我发现改变/etc/bash.bashrc是不够的。 我也尝试了不同的profile.d文件,但它是无用的,因为home .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