0%

玩转tmate

tmate 的可玩性很强.

1
https://tmate.io

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。

QQ群:397745473

谷歌的colab

1
2
3
4
5
6
1. 打开一个colab
2. apt -y install tmate
3. !ssh-keygen
4. !tmate -S /tmp/foo.sock

得到 https://tmate.io/t/trMh5YNUzkDD8rZUTnv7SvtNf 就可以直接打开终端了

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
apt -y install tmate
apt-get install net-tools
apt-get install iputils-ping
apt install openssh-server
tmate show-messages
./ngrok authtoken <your_auth_token>

指定socket文件启动: tmate -S /tmp/foo.sock
分离: tmate detach
接入: tmate -S /tmp/foo.sock attach
查看: tmate -S /tmp/foo.sock ls
关闭: tmate -S /tmp/foo.sock kill-session

tmate启动之后,过几分钟后再执行tmate show-messages就会失效,那么需要重新获取连接信息的话,可以使用下面的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

function usage
{
echo "Usage: $1 <sock> [sshrw|webrw|sshro|webro]" >&2
}

tmate_sock=$1
msg_type=${2:-"sshrw"}
[[ -z $tmate_sock ]] && usage $0 && exit 1

case $msg_type in
"sshrw") tmate -S $tmate_sock display -p '#{tmate_ssh}' ;;
"sshro") tmate -S $tmate_sock display -p '#{tmate_ssh_ro}' ;;
"webrw") tmate -S $tmate_sock display -p '#{tmate_web}' ;;
"webro") tmate -S $tmate_sock display -p '#{tmate_web_ro}' ;;
*) usage $0; exit 1; ;;
esac
exit $?

访问控制

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

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

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

  • 将你所信任的人B的公钥加入到你(A)的~/.ssh/authorized_keys文件中,

  • 启动tmate使用如下命令:

1
A$ tmate -a ~/.ssh/authorized_keys

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

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

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

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

QQ群:397745473

欢迎关注我的其它发布渠道