在Unix/Linux上工作,最常用的就是Terminal。那么,如何将你的Terminal共享给别人一起协同工作(你帮助别人解决问题或者请别人帮你解决问题)呢?很简单,使用终端共享神器tmate。
01 - 刚性需求
绝大多数人都不是万能的,总有需要他人现场指导或提供帮助的时候。那么,在无法面对面交谈的时候(尤其是在病毒肆虐的特殊时期),把你的终端(Terminal)共享出去,就可以实现适时的1:1协助。同样地,基于Terminal的结对编程或code review也可以这么实现。
02 - 基本流程
02.1 安装tmate
sudo dnf install tmate # <<< Fedora sudo yum install tmate # <<< CentOS sudo apt install tmate # <<< Ubuntu
02.2 启动tmate
假定A现在需要B的帮助,于是,A在他的终端(Terminal)上键入:
A$ tmate
然后就可以看到类似下图的界面:
现在A通过即时通讯软件(如IRC)将"ssh session:"后面的那串消息"ssh 3vRvL79HMtjmBetF37REVvU4z@sfo2.tmate.io"发送给B,然后等待B的连接。
注意:如果A没有SSH key,需要事先创建一个,命令如下:
A$ ssh-keygen
02.3 通过ssh进行连接
B在其终端输入:
B$ ssh 3vRvL79HMtjmBetF37REVvU4z@sfo2.tmate.io
然后B和A就共享了同一个Terminal。无论是A还是B都可以操作该Terminal。
02.4 关闭连接
A在他的终端(Terminal)上键入exit即可。
A$ exit
03 - 基本原理
tmate即teammates,是tmux的一个分支,并且和tmux使用相同的配置信息(i.e. tmate与tmux共享~/.tmux.conf)。tmate不仅是一个终端多路复用器,而且具有即时分享终端的能力。它允许在单个屏幕中创建并操控多个终端,同时这些终端还能与其他同事分享。总的来说,tmux支持的窗口(window)和窗格(pane)功能,tmate都支持。tmate的基本工作原理如下:
04 - 常见命令
04.1 显示连接信息
$ tmate show-messages Sat Feb 29 20:32:31 2020 [tmate] Connecting to master.tmate.io... Sat Feb 29 20:32:37 2020 [tmate] Note: clear your terminal before sharing readonly access Sat Feb 29 20:32:37 2020 [tmate] web session read only: https://tmate.io/t/ro-59nhrEMMpr8fvYEfW3LbU69r9 Sat Feb 29 20:32:37 2020 [tmate] ssh session read only: ssh ro-59nhrEMMpr8fvYEfW3LbU69r9@nyc1.tmate.io Sat Feb 29 20:32:37 2020 [tmate] web session: https://tmate.io/t/2VFPtcBNnhaNRGWmKgKZH3zfn Sat Feb 29 20:32:37 2020 [tmate] ssh session: ssh 2VFPtcBNnhaNRGWmKgKZH3zfn@nyc1.tmate.io
04.2 分离/接入/查看
$ tmate -S /tmp/foo.sock
$ tmate detach
$ tmate -S /tmp/foo.sock attach
$ tmate -S /tmp/foo.sock ls 0: 2 windows (created Sat Feb 29 20:40:02 2020) [144x35]
$ tmate -S /tmp/foo.sock kill-session
05 - 更多连接方式
tmate支持4种连接方式,ssh、ssh-ro、web和web-ro。其中,ssh、web支持读写访问,ssh-ro、web-ro支持只读访问。下面就是web只读访问方式的截图。
注意:tmate启动之后,过几分钟后再执行tmate show-messages就会失效,那么需要重新获取连接信息的话,可以使用下面的脚本:
1 #!/bin/bash 2 3 function usage 4 { 5 echo "Usage: $1 <sock> [sshrw|webrw|sshro|webro]" >&2 6 } 7 8 tmate_sock=$1 9 msg_type=${2:-"sshrw"} 10 [[ -z $tmate_sock ]] && usage $0 && exit 1 11 12 case $msg_type in 13 "sshrw") tmate -S $tmate_sock display -p ‘#{tmate_ssh}‘ ;; 14 "sshro") tmate -S $tmate_sock display -p ‘#{tmate_ssh_ro}‘ ;; 15 "webrw") tmate -S $tmate_sock display -p ‘#{tmate_web}‘ ;; 16 "webro") tmate -S $tmate_sock display -p ‘#{tmate_web_ro}‘ ;; 17 *) usage $0; exit 1; ;; 18 esac 19 exit $?
例如:
$ ./foo.sh /tmp/foo.sock sshrw ssh JHELdz9a3EvTcL5w5beVMvwde@sfo2.tmate.io $ ./foo.sh /tmp/foo.sock sshro ssh ro-Nv7fk2YT3urVEAEFCSexx7XHw@sfo2.tmate.io $ ./foo.sh /tmp/foo.sock webrw https://tmate.io/t/JHELdz9a3EvTcL5w5beVMvwde $ ./foo.sh /tmp/foo.sock webro https://tmate.io/t/ro-Nv7fk2YT3urVEAEFCSexx7XHw
06 - 特别提醒
参考资料:
原文:https://www.cnblogs.com/idorax/p/12380758.html