Changing Terminal colors when ssh-ing into remote machine and back
Looking for a way automatically change terminal colors when ssh-ing into remote machine and revert back to the default colors, when exiting the ssh session. Simply, want have another colors when i'm working on the remote machine.
Any idea?
ps: don't want use iTerm2, but standard Terminal.app
Solution 1:
I'm using the following.
Have a shell command, called myssh
, with content:
PROFILE="$1";shift;
DEF="Basic" #the default profile name
echo "tell app \"Terminal\" to set current settings of first window to settings set \"${PROFILE}\""|osascript
ssh $@
echo "tell app \"Terminal\" to set current settings of first window to settings set \"${DEF}\""|osascript
and use bash aliases for the connect, like:
alias ssweb='myssh Homebrew [email protected]'
alias ssmail='myssh Ocean [email protected]'
When I want to ssh into the web server, I simply write ssweb
in the Terminal and I got the "Homebrew" profile. When the ssh session ends, the AppleScript sets back to the "Basic".
The aliases should go into your $HOME/.profile or similar bash-startup file.
The "Homebrew", "Ocean" etc. are the setting profiles from the Terminal.app preferences. You can also set up different fonts, encodings, etc.
Of course, you can use it directly (without aliases) like:
myssh Pro [email protected]
^ ^
| ssh command arguments
terminal profile name
Solution 2:
I know there's already a couple of answers, but here's an alternative:
There's no general way to change the background color, but we can use a standard way to change the window title. If you're logging in to a lot of non-"Unix server" devices (such as network devices; routers, switches, firewalls etc) then you have to use their shells and cannot install your own shell variables. So, here's another way:
function ssh() {
echo -ne '\033[22;0t' # save title
H=$(echo $@ | sed -e 's/.*@//g;s/ .*//g')
echo $@ | grep '@' && U=$(echo $@ | sed -e 's/@.*//g;s/.* //g')
echo -ne "\033]0;${U:=$(whoami)}@${H%%.*}\007"
unset H
unset U
/usr/bin/ssh $@
echo -ne '\033[23;0t' # restore title
}
Add this to your .bashrc
.
Basically, as functions and aliases are preferred to looking in the path, this takes the ssh command and uses the text before and after the "@" to set HOST and USER variables which it then uses to echo an ASCII code which is recognised by the terminal and used to set the title.
You must use "ssh [email protected]" for this and not "ssh -l user host.blah"
If you don't provide a username it will set it as your current username (obviously if you're using a custom .ssh/config (which I use a lot) then this won't be accurate, but I think it's good enough to be useful.