如果我登录到远程服务器,而其他人登录到同一台服务器,是否有某种方法可以通过命令行让他们“监视我”?
当然,我可以每隔一段时间复制并粘贴我的终端回滚缓冲区并将其转储到 中的文件中/tmp
,并且他们可以cat
该文件......这与我所说的很接近,尽管它没有颜色。
这与“屏幕共享”的典型含义非常不同,因为它不涉及任何额外的操作网络根本没有流量——只是本地资源。 (你们都已经登录了。)
我已经有了分数在短短几个月内出现的案例中,这将非常有用。
这可能吗?我该怎么做?
答案1
很多人都建议过screen
。屏幕有点旧,而且很糟糕。我建议tmux
。
要创建会话,只需运行tmux new -s <name>
然后,要让另一个人附加到该会话,他们所要做的就是运行tmux a -t <name>
,并确保保持名称相同。
Ctrl可以通过点击-thenb来离开会话d。
请注意,这一切都必须在同一台服务器/计算机上完成。
答案2
我刚刚遇到这个选项man script
:
-f Flush output after each write. This is nice for telecooperation:
One person does ‘mkfifo foo; script -f foo’ and another can
supervise real-time what is being done using ‘cat foo’.
我还没玩过这个,但看起来像确切地我在寻找什么。玩弄它可以确定是否也传达了颜色等。
答案3
如果您知道她正在使用哪个终端,则可以使用tee
管道将输出传输到其他人的终端。
您可以使用以下w
命令来查找终端:
user4@myubuntu:~$ w
16:41:36 up 13 min, 4 users, load average: 0.55, 0.60, 0.46
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 :0 :0 16:28 ?xdm? 6:28 0.03s gdm-session-worker [pam/gdm-password]
user2 pts/1 :0 16:38 2:46 0.04s 0.04s bash
user3 pts/7 :0 16:38 1:32 0.09s 0.09s bash
user4 pts/8 :0 16:41 4.00s 0.05s 0.00s w
我user4
在航站楼pts/8
。如果我想将输出发送到user2
终端pts/1
,那么我使用以下命令启动一个新的 shell:
$ bash | tee /dev/pts/1
然后我后续命令的所有输出(尽管不是输入)都将被复制到user2
.如果完成,只需点击Ctrl-D
即可终止 shell。
如果您只想向其他用户发送消息或一些文本,您可以使用以下write
命令:
$ write <username>
hello, are you there ?
Ctrl-d
答案4
好吧,共享屏幕screen
是可能的,但比我想象的要复杂。
- 它需要
screen
将uid设置为root,以便它可以访问其他用户的套接字。 (有人可能认为这可以只与 setgid 一起使用,但我没有检查是否screen
可以这样编译。) - 文档对于多用户命令来说有点简单,这意味着配置它并不那么简单。此外,虽然您可以为其他用户设置 ACL,但似乎不存在选项印刷当前的 ACL。
也就是说,我能够让它发挥作用,实现某些“工作”的价值观。
首先,确保它有足够的权限,并修复以下权限/var/run/screen
:
chmod u+s /usr/bin/screen
chmod 755 /var/run/screen
然后,将一些配置命令捆绑在一个文件中:
$ cat shared.screen.rc
multiuser on
aclumask ?-wx
aclumask ??-wx
addacl foo
aclchg foo -x ?
aclchg foo +x detach,help,next,prev,windows,info,select
multiuser
启用多用户模式,aclumask
限制所有用户的默认访问权限,然后addacl
允许(所有)访问 user foo
。这些aclchg
命令删除了-x
对所有命令 ( ?
) 的执行 ( ) 访问权限,然后我们再次允许一些良性命令。
然后,运行screen -c shared.screen.rc
,创建一个用户foo
可以附加到的屏幕:
foo$ screen -ls bar/
There is a suitable screen on:
18839.pts-2.test (08/21/16 22:09:07) (Multi, detached)
foo$ screen -r bar/
写入屏幕和使用大多数命令都会导致错误。然而,复制模式似乎有效。此外,当非拥有用户将拥有用户踢出时启动屏幕screen -rd bar/
,即使您认为这是不可能的。screen -RRD
也有效,并注销原始用户。即使您可以禁止pow_detach
and detach
(这对第二个用户来说应该很有趣),但这似乎并没有影响这一点。有趣。
当然,如果您不介意,并且乐意让其他用户弄乱您的屏幕,那么使用multiuser on
和addacl foo
就足够了。我并不是说你应该这样做。