zoukankan      html  css  js  c++  java
  • 终端共享神器tmate简明教程

    在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的基本工作原理如下:

    • 运行tmate时,会在后台创建一个连接到tmate.io(由 tmate 开发者维护的后台服务器)的ssh连接;
    • tmate.io服务器的ssh密钥通过DH交换进行校验;
    • 客户端通过本地ssh密钥进行认证;
    • 连接创建后,本地tmux服务器会生成一个150位(不可猜测的随机字符)会话令牌;
    • 队友能通过用户提供的SSH会话ID连接到tmate.io。

    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 分离/接入/查看

    • 指定socket文件启动
    $ 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 - 访问控制

    通常情况下,鉴于tmate生成的共享链接(ssh or web)在提供给他人访问的时候无需任何安全验证,而且此连接存储在tmate.io的服务器上,所以在使用此功能的时候请保持谨慎。

    • 第一,只把共享链接发送给你所信任的人知晓;
    • 第二,如无必要,请仅仅发送只读链接;
    • 第三,一旦共享结束,请及时关闭会话。

    那么,如何实现访问控制呢?

    • 将你所信任的人B的公钥加入到你(A)的~/.ssh/authorized_keys文件中,
    • 启动tmate使用如下命令:
    A$ tmate -a ~/.ssh/authorized_keys

    这样,只有B才能通过ssh访问你的共享链接。陌生人C的公钥没有保存到A的~/.ssh/authorized_keys文件中,于是会出现如下类似的拒绝访问信息。

    C$ ssh ERayHQKUPZkhtVufjjFTvtfjC@sgp1.tmate.io
    ERayHQKUPZkhtVufjjFTvtfjC@sgp1.tmate.io: Permission denied (publickey).

    有关访问控制的更多内容,请访问https://tmate.io/的Access control一节。

    特别提示:一旦使用了基于文件authorized_keys的访问控制,就不能使用基于web的连接方式,也就是说,只能使用ssh进行连接。

  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/kcxg/p/14234111.html
Copyright © 2011-2022 走看看