今天发现,作为一个不同的用户,我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上连接和窥探。