I use a specific "PS1" prompt that I like. I share a few logins with other other people on a few different servers. I was wondering if there was a way to specify in my local bash profile a remote prompt, or any other way other then copy and pasting each time I remote in.
Upload a file on each remote machine, say
~/.my_custom_bashrc, with your custom
bash configuration, (in this case
PS1=...) then launch
ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"
You can easily use a
bash function as wrapper for readability.
If you just want to send the
PS1 variable, and it doesn't contain a
' (single quote), try:
ssh targethost -t "PS1='$PS1'; exec bash"
.bashrc may well overwrite
PS1 though (thanks to Dennis Williamson for pointing this out).
There are ways to transmit environment variables over ssh, but they're typically disabled in the server configuration. If the
PermitUserEnvironment directive is enabled in the server configuration and each user has their own key pair (yeah, you might not be so lucky), you can add
environment="PS1=…" to the line in
~/.ssh/authorized_keys corresponding to your key.
If you'd like to keep your own configuration on a shared user account, you can create your own configuration file directory and set the
HOME environment variable to point to that directory.
ssh targethost mkdir mrstatic.home scp .bashrc targethost:mrstatic.home/
Create symbolic links in the
mrstatic.home directory pointing back to the corresponding entry in the parent directory when you want to share a file with the other users.
Then, log in with
ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`
If you're willing to modify the remote
.profile (or other initialisation file), you can probably automate your settings. Many sites allow
LC_* environment variables through (normally they are used for locale settings). If both these conditions are met, you can set a variable that isn't actually used for locales, say
LC_USER, on the client side, and test it in the server
(Of course shared accounts are a bad idea, but I realize you may not be in a position to change that situation.)
ssh -t user@host "remote='$PS1' bash -i"
Then, at the prompt:
Put your PS1 prompt in ~/.ssh/environment and ssh session will carry it to every host you login. It works for me with openssh 4.3p2 .
you can specify environment variables on the client side and if the ssh-server allows it (check man sshd-config), these variables are copied to the session when you log into the machine.
so, you would have to configure the .bashrc on the server to check an existing PS1 (or whatever variable) and only set PS1 if it is not set already.
or, which make things simpler, you bundle your settings into a function .. and deploy that function either as a special file your source on demand (
source joes_bashrc) or directly to the .bashrc. having your own file seems a bit more robust. the other folks might use your settings but are not forced to do so.
Do not share logins. SSH as yourself, then do
sudo -su shareduser (
-s means "shell").
sudo keep your home directory:
Defaults env_keep += "HOME"
If you wanna do it without needing an extra scp you can do something like this:
ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'
That'll generate a .bashrc.n that's based on the servers bashrc but with your overrides.
If you’re willing to intrude imperceptibly on your colleagues, and you can trust them not to interfere with your preference, then I suggest a combination of cYrus’s answer, akira’s answer and Dennis Williamson’s answer.
- On each server, edit
if [ "$Unf" = 1 ] # Special code for Unfundednut then PS1="(your desired prompt)" (any other customizations you want) fiat the end. While your colleagues “would not appreciate [you] writing over the base profile”, they won’t be aware of this unless they go looking for it.
- When you login to a remote server,
ssh -t user@host "Unf=1 bash -i"While you will probably want to put that into an alias or shell function in your local account, it is short enough — shorter than any of the other answers — that you could easily just type it manually.
I believe that this is fairly clear, but:
ssh command causes the
to be set on the remote server when you log into it.
That will invoke your code in the remote
which will put your customization(s) into effect.
Since you put your code at the end of
it will override the general settings earlier in the file.
Disclosure: I have not tested this.
The easiest way is IMHO :
ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'
You could do stuff like mounting your home over sshfs/nfs, but the easiest solution is to scp your bashrc across to the new machine. This also brings aliases and stuff.