내가 원격 서버에 로그인하고 다른 사람이 동일한 서버에 로그인한 경우 명령줄을 통해 다른 사람이 "나를 감시"하도록 할 수 있는 방법이 있습니까?
물론 가끔씩 터미널 스크롤백 버퍼를 복사하여 붙여넣고 파일에 덤프할 /tmp
수 있습니다 cat
. 색상은 없지만 제가 말하는 내용과 거의 비슷합니다.
이는 추가 작업이 필요하지 않기 때문에 "화면 공유"의 일반적인 의미와 매우 다릅니다.회로망트래픽이 전혀 없습니다. 로컬 리소스만 있습니다. (모두 로그인되어 있습니다.)
나는 이미 그것을 갖고 있다분수이는 단 몇 달 안에 발생하는 경우에 매우 유용할 것입니다.
가능합니까? 어떻게 해야 합니까?
답변1
많은 사람들이 그것을 제안했습니다 screen
. 화면이 조금 오래되고 끔찍합니다. 나는 추천한다 tmux
.
세션을 생성하려면 다음을 실행하세요.tmux new -s <name>
그런 다음 다른 사람이 세션에 연결하려면 실행 tmux a -t <name>
하고 이름을 동일하게 유지하기만 하면 됩니다.
Ctrl-then 을 클릭하여 b세션을 종료 할 수 있습니다 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
다음을 사용하여 새 셸을 시작합니다.
$ bash | tee /dev/pts/1
그런 다음 후속 명령의 모든 출력(입력은 아님)이 에 복사됩니다 user2
. 완료되면 클릭하여 Ctrl-D
셸을 종료합니다.
다른 사용자에게 메시지나 텍스트를 보내려면 다음 write
명령을 사용할 수 있습니다.
$ write <username>
hello, are you there ?
Ctrl-d
답변4
글쎄, 화면을 공유하는 것은 screen
가능하지만 생각보다 복잡합니다.
screen
다른 사용자의 소켓에 액세스하려면 uid를 루트로 설정 해야 합니다 . (누군가는 이것이 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
및 detach
(두 번째 사용자에게는 흥미로울 것임)를 비활성화할 수 있더라도 이에 영향을 미치지 않는 것 같습니다. 흥미로운.
물론, 마음에 들지 않고 다른 사용자가 화면을 어수선하게 만드는 것이 기쁘다면 multiuser on
and를 사용하면 addacl foo
충분합니다. 나는 당신이 이것을 해야 한다고 말하는 것이 아닙니다.