Tmate-随时随地与任何人共享终端

时间:2020-03-21 11:48:25  来源:igfitidea点击:

当需要与同事或者朋友共享 Screen时,可以使用许多流行的远程桌面共享程序(例如Teamviewer,鳄梨酱和TigerVNC等)。

这些程序会将整个 Screen共享给其他人。
但是,如果我们只想共享终端,则可以使用Tmate。
它实际上是Tmux的一个分支,它是一个终端多路复用器,使我们可以在一个终端中使用多个程序。

它们都可以同时安装在同一系统上。
Tmate就像我们终端的Teamviewer一样。

对于那些想知道的人,Tmate将通过SSH建立与tmate.io的安全连接,并为每个会话生成一个随机URL。
我们可以与我们信任的人共享URL,并且只要连接处于活动状态,他们就可以使用终端作为自己使用终端的方式。
最好是在普通项目上进行协作,或者与开发人员团队调试项目,或者通过远程网络获得技术支持。
Tmate支持所有流行的操作系统,包括GNU/Linux,Mac OS X和BSD系统。

在本教程中,我将解释如何在类似Unix的操作系统中安装和使用Tmate。

Tmate-随时随地与任何人共享终端

安装Tmate

对于Arch Linux及其衍生工具(如Antergos,Manjaro Linux,Tmate)在AUR中可用,因此我们可以使用Yay等AUR帮助程序来安装它。

$yay -S tmate

对于Fedora,运行以下命令以安装Tmate。

$sudo dnf install tmate

在Ubuntu及其衍生版本(如Linux Mint)上,可以使用以下PPA进行安装。

$sudo apt-get install software-properties-common
$sudo add-apt-repository ppa:tmate.io/archive
$sudo apt-get update
$sudo apt-get install tmate

在Ubuntu 18.04 LTS版本上,启用Universe资源库并按如下所示安装Tmate。

$sudo add-apt-repository universe
$sudo apt install tmate

在FreeBSD上:

# pkg install tmate

OpenBSD的:

# pkg_add tmate

配置SSH

在开始使用Tmate之前,我们需要创建一个SSH密钥对。
因为,tmate程序使用本地SSH密钥对与tmate.io建立了安全的SSH连接。

让我们使用以下命令创建SSH密钥对:

$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sk/.ssh/id_rsa): 
Created directory '/home/sk/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/sk/.ssh/id_rsa.
Your public key has been saved in /home/sk/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DL3+rYrYtXYHxyFfDSRAsz4470wAQ+V/iW+sd5/fnA0 Hyman@theitroad
The key's randomart image is:
+---[RSA 2048]----+
| ....+.... |
| . o o .. |
| + o . o |
| = =..... .|
| S =+oo |
| . +.=+ |
| o oo+ E |
| o o.*.+o .o=|
| . o.oo*+.. +B|
+----[SHA256]-----+

如果我们未创建,则将在“终端”窗口的底部看到以下通知消息。

[Tmate] Reconnecting... (SSH keys not found. Run  'ssh-keygen' to create keys and try again.)

配合使用

创建SSH密钥对后,通过从终端运行以下命令来启动Tmate:

$tmate

如果在创建SSH密钥对时输入了密码,则可能需要输入密码以建立Tmate会话。

启动Tmate会话后,与要与之共享 Screen的任何人共享连接ID。
我们可以与我们信任的任何人共享它。
他们不必位于同一网络中,也不必使用相同的OS。
他们甚至不必安装tmate或者tmux。

这就是Tmate会话的样子。

如我们在上面的 Screen截图中所见,在 Screen底部有一个SSH会话ID(一串随机字符)。
只需复制并与他人共享即可进行连接。
请注意,此ID会在几秒钟后消失。
但是,我们仍然可以使用以下命令查看会话ID:

$tmate show-messages

输出示例为:

Fri Aug 11 17:18:48 2016 [tmate] Connecting to ssh.tmate.io...
Fri Aug 11 17:18:49 2016 [tmate] Note: clear your terminal before sharing readonly access
Fri Aug 11 17:18:49 2016 [tmate] web session read only: https://tmate.io/t/ro-UVgrzHg2BVanPXZnt6JtlpU3V
Fri Aug 11 17:18:49 2016 [tmate] ssh session read only: ssh Hyman@theitroad
Fri Aug 11 17:18:49 2016 [tmate] web session: https://tmate.io/t/LVWgMSX2wNhBLdrLfxtcX00rk
Fri Aug 11 17:18:49 2016 [tmate] ssh session: ssh Hyman@theitroad

如上面的输出所示,我们可以使用相应的会话ID通过SSH会话或者Web会话共享终端。
我们也可以共享只读会话或者读写会话。

非常非常重要的说明:请注意,如果我们提供了读写会话ID(SSH或者Web),则用户可以执行任何操作。
因为,我们只是给他提供了具有sudo权限的系统访问权限。
因此,我强烈建议我们提供只读会话ID。

当我们共享只读会话时,我们不想让远程用户查看其他读写会话ID。
因此,在将会话ID提供给用户之前,只需清除终端即可。

通过SSH会话连接

对于那些想通过SSH会话共享终端的用户,请将SSH会话ID提供给远程用户。

例如,远程用户输入以下命令以从其系统访问只读Tmate会话。

$ssh Hyman@theitroad

在只读会话中,远程用户只能查看终端。
他们无法运行任何命令。

要共享读写会话,命令为:

$ssh Hyman@theitroad

现在,远程用户可以以读写模式访问终端。
这意味着他们可以在终端上运行任何命令。
他们在远程会话中输入的所有命令也可以从本地终端查看。

通过网络会话进行连接

对于那些想要通过网络浏览器共享终端的人,只需将网络URL提供给其他人即可连接。

例如,要共享读写,我会将这个URL提供给我的同事https://tmate.io/t/LVWgMSX2wNhBLdrLfxtcX00rk

当他们输入上述URL时,将看到以下 Screen。

再次提醒我们,除非绝对必要,否则请勿将读写会话ID提供给任何人。
仅与受信任的人共享读写会话。

建议阅读:

  • Reptyr –将正在运行的进程从一个终端移到另一个终端而无需关闭它

在tmate会话下工作与tmux完全相同。
我们可以将tmate视为可从任何位置访问的反向ssh隧道。
要退出会话,请键入exit。