作为不同的用户和运行屏幕

今天发现,作为一个不同的用户,我sudo屏幕上运行屏幕将无法正常工作!

ssh bob@server # ssh into server as bob sudo su "monitor" - screen # fails 

我有一个脚本作为“监视器”用户运行。 我们在屏幕会话中运行它,以便在屏幕上看到输出。 问题是,我们有一些用户login自己的帐户(即鲍勃,詹姆斯,苏茜等),然后他们sudo到“显示器”用户。 让他们访问“监视”用户是不可能的。

    尝试运行script /dev/null作为您启动屏幕前的用户 – 它是一个贫民窟的小黑客,但它应该使屏幕快乐。

    我使用围绕screen的包装function,我sudo su用户。 这是我添加到用户的封装函数~/.bashrc

    function画面(){
       / usr / bin / script -q -c“/ usr / bin / screen $ {*}”/ dev / null
     }
    

    这使我可以使用我可能要使用的所有screen选项和参数。 我正在考虑把这个function放到系统中去。

    假设他们正在通过SSH连接到主机,您可以为需要访问monitor monitor / .ssh / authorized_keys文件中的监视器帐户的每个用户添加公共ssh密钥。 然后在每个用户的远程机器上运行

    ssh -t [email protected] screen -RD

    假设我们正在谈论这个错误:

     $ sudo su - bob $ screen Cannot open your terminal '/dev/pts/5' - please check. 

    这里是一个单行(例如,可以用作“alias gobob”):

     sudo su - bob -c "script -c bash /dev/null"' 

    说明:

    这将以用户bob的身份启动一个shell(如loginshell)。 用户bob启动script ,被告知调用bash(可能是短划线或ksh …),会话的副本将被丢弃。

    可能必须更改有问题的设备的权限,或将监视器添加到有权读取该设备的组,这将是我的第一个倾向。 但是你必须权衡这样做的安全含义。

    你说你这样做:

     sudo su "monitor" - 

    我想知道跟踪破折号。 我通常做:

     sudo su - username 

    短划线(按照su man页面)告诉su“使shell成为loginshell”。 这意味着它将获取所有常用的shell启动脚本,并正确设置PATH和HOME之类的东西。

    我刚刚遇到这个问题。 在运行sudo之前用chmod +rw $(tty)解决它。 这个解决scheme的问题在于,任何人都可以在你的terminal上连接和窥探。