Closed Jabberworkkkk closed 1 month ago
参考 个性配置,在
~/.tssh.conf
中如下配置,应该就能满足你的需求了:SetTerminalTitle = Yes
我看了下自己的 .tssh.conf 发现已经是这样配置了,就确认了一下情况,看来我一开始理解错了,情况应该是这样:对于没有在 .bashrc 里配置PROMPT_COMMAND的设备,tssh 在登录后会自动把标题改为设备的IP,但对于linux类服务器,PROMPT_COMMAND变量即使没有在 .bashrc 里自定义也会有一个默认值,在tssh登录后也会按照这个默认值来修改标题。之前对readme那理解的可能不是很对。 那么请问能否增加一个开关,让tssh忽略服务器上的PROMPT_COMMAND呢?对于自己管理的服务器来说,修改 .bashrc 是很容易的,但假设一位管理虚拟化平台的管理员,他有时候需要登录用户在虚拟化平台上创建的VM做些操作,但他直接去修改用户VM上的 .bashrc 有时并不合适。在这种情况下,如果tssh能增加一个开关允许无视服务器的 PROMPT_COMMAND值就会比较方便了。
PROMPT_COMMAND 只有含有类似 'echo -ne "\033]0;...\007"'
,才会修改标题。这个是服务器的输出,终端识别了这个输出,然后终端修改了标题。
要无视服务器的 'echo -ne "\033]0;...\007"'
,除非 tssh
修改服务器的输出,过滤掉所有修改标题相关的内容,别输出给终端,才可以。
修改服务器输出的做法,我觉得不是很好。不修改 .bashrc
等文件,也可以通过 自动交互 来自定义 PROMPT_COMMAND
,如:
Host xxx
#!! ExpectCount 1
#!! ExpectPattern1 $
#!! ExpectSendText1 export PROMPT_COMMAND='echo -ne "\\033]0;我的标题\\007"'\r
修改服务器输出的做法,我觉得不是很好。不修改
.bashrc
等文件,也可以通过 自动交互 来自定义PROMPT_COMMAND
,如:Host xxx #!! ExpectCount 1 #!! ExpectPattern1 $ #!! ExpectSendText1 export PROMPT_COMMAND='echo -ne "\\033]0;我的标题\\007"'\r
这确实是一个办法。不过可能是我对bash shell不熟悉,研究了很久还是找不到能够完美在PROMPT_COMMAND里动态获得IP地址的方法,最接近的是下面这样:
#!! ExpectCount 1
#!! ExpectPattern1 ]
#!! ExpectSendText1=export PROMPT_COMMAND='echo -ne "\\033]0;${USER}@${SSH_CONNECTION#* * *}\\007"'\r
效果如下:
IP后面的端口号实在找不到方法去掉
笨方法是每个 Host 分别配置,写死 IP。
看来没什么特别好的解决办法,也只能这样了,感谢回复
可以考虑让 ExpectSendText
支持 ssh tokens,要改一下代码。
不过是破坏性的修改,原来的 %
要写成 %%
,升级 tssh
之后,可能有些人的配置可以要修改。
我有个想法,提供一个开关,让标题可以显示为类似:
[远程服务器IP]:由远程服务器PROMPT_COMMAND定义的字符串
即在标题栏前半部分固定显示IP,后半则正常显示PROMPT_COMMAND的内容,后果就是标题栏占空间要大一点
我有个想法,提供一个开关,让标题可以显示为类似:
[远程服务器IP]:由远程服务器PROMPT_COMMAND定义的字符串
即在标题栏前半部分固定显示IP,后半则正常显示PROMPT_COMMAND的内容,后果就是标题栏占空间要大一点
tssh
要修改标题,只能通过修改服务器的输出来实现,和前面屏蔽PROMPT_COMMAND
是一样的原理,我觉得不是很好。
让 ExpectSendText
支持 ssh tokens,我认为是可行的,一是使用 自动交互 的用户还不多,要输入 %
的就更少了,即使用到也可以简单地把 %
改成 %%
解决。
ExpectSendText*
已支持 ssh tokens。
在 v0.1.22
发布前,可以这样安装 go install github.com/trzsz/trzsz-ssh/cmd/tssh@main
,安装的路径在 ~/go/bin/
。
然后,参考下面配置即可:
Host xxx
#!! ExpectCount 1
#!! ExpectPattern1 $
#!! ExpectSendText1 export PROMPT_COMMAND='echo -ne "\\033]0;%r@%h\\007"' && clear\r
新功能基本实现了想要的效果,除了个别已经在 .bashrc 里配置了$PS1的值的会又自动把标题给改回去,这种就不折腾了,感谢!
新功能基本实现了想要的效果,除了个别已经在 .bashrc 里配置了$PS1的值的会又自动把标题给改回去,这种就不折腾了,感谢!
#!! ExpectSendText1 export PROMPT_COMMAND='echo -ne "\\033]0;%r@%h\\007"' && unset PS1 && clear\r
这样是否可以?
新功能基本实现了想要的效果,除了个别已经在 .bashrc 里配置了$PS1的值的会又自动把标题给改回去,这种就不折腾了,感谢!
#!! ExpectSendText1 export PROMPT_COMMAND='echo -ne "\\033]0;%r@%h\\007"' && unset PS1 && clear\r
这样是否可以?
试了一下,有点问题。直接unset PS1那命令提示符那直接就没了...但肯定是可以改进的 我上面说的不折腾意思是指就我个人情况而言,需要登录的linux类服务器大部分是centos类的,ubuntu的不多,我懒得再去搜集那些ubuntu服务器的IP在ssh config里另写host配置不一样的自动应答命令。但要想实现肯定是可以的。
我已经阅读过 #38 ,明白可以在linux类服务器上通过配置 .bashrc 文件自动修改标题。但对于各类非通用linux操作系统的网络设备,比如说各种专业网络交换机、路由器、防火墙...它们是无法这样配置的。因此,希望作者能在tssh的配置文件中提供一个选项,让每个连接的标题自动修改为 “ 用户名@IP ”的格式(前提当然是这个连接没有在ssh的配置中预先定义),希望作者能考虑一下,谢谢!