当我 ssh 连接服务器时,如何自动更改终端颜色?

当我 ssh 连接服务器时,如何自动更改终端颜色?

我经常从我的 os x 终端窗口登录到不同的服务器。

我想为不同的主机指定一个配色方案,以便我的终端窗口更容易区分。这可以自动完成吗?

答案1

这是一个完整的解决方案。在 ~/.server_colors 中保存服务器 IP 地址和/或域的列表以及您想要的颜色:

192.168.122.102,红沙
192.168.122.103,海洋
www.foo.com,草
foo.com,草

然后将这一行添加到~/.profile 来劫持 ssh 命令:

别名 ssh="~/bin/safe_ssh $1"

然后将 ssh 目标中 @ 后面的内容与列表进行比较。如果匹配,则运行 AppleScript 将屏幕更改为相应的颜色。以下是 ~/bin/safe_ssh:

/bin/bash #!/bin/bash
ip =`echo $ 1 | cut -d“ @” -f2`
匹配 =`cat ~/.server_colors | grep $ip | wc -l`
如果 [ $match -gt 0 ]
然后
    颜色 =`cat ~/.server_colors | grep $ip | cut -f2 -d","`
    osascript ~/bin/change_terminal_color.scpt "$color" 2>/dev/null
/usr/bin/ssh $1

最后,这是 ~/bin/change_terminal_color.scpt

运行 argv
    告诉应用程序“终端”将窗口 1 的选定选项卡的当前设置设置为(第一个设置集,其名称为(argv 的第 1 项))
结束运行

我从这篇博文

答案2

@muirbot 的解决方案对我来说非常有效。我对此做了一些小改进。一旦我拥有足够的声誉,我就会将其添加到他的帖子下方。

更换线路

ip=echo $1 | cut -d"@" -f2
ip=echo $@ | grep -Eio [[:alnum:]_.-]+@[[:alnum:]_.-]+ | cut -d@ -f2

此更改允许为 ssh 命令提供附加参数,如“ssh -p 1111 userName@host”

正则表达式允许简单的 IPv4 地址和域名。

为了进一步支持多个参数,将最后一行更改为

/usr/bin/ssh $@

更新 2021-03-03:

当你拥有像 example.com 这样的域名时www.example.com使用不同的颜色,那么脚本将无法按预期工作。

确保将最短的 URL 放在顶部,然后更改

颜色=cat ~/.server_colors | grep $ip | cut -f2 -d","
颜色=cat ~/.server_colors | grep -m 1 $ip | cut -f2 -d","

grep -m 1当找到第一个匹配项时,命令将停止。

答案3

是的。

您可以使用例如“屏幕”并对其进行自定义: http://www.slac.stanford.edu/comp/unix/package/epics/extensions/iocConsole/screen.1.html

或者,如果可能的话,您可以在 SSH 客户端上执行此操作。

你也可以尝试这个:http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/

答案4

我使用一个脚本在 xterm 窗口中以不同的 bg/fg 颜色启动 SSH。它根据主机名的哈希值从颜色范围中选择颜色,因此无需进行任何配置。

该脚本用 Ruby 编写:https://github.com/mickeyil/ssx

相关内容