Tente executar script /dev/null
como o usuário a quem você su
antes de iniciar a tela - é um hack do gueto, mas deve deixar a tela feliz.
Descobri hoje que a tela de execução como um usuário diferente no qual eu sudo não funciona!
ou seja,
ssh bob@server # ssh into server as bob
sudo su "monitor" -
screen # fails: Cannot open your terminal '/dev/pts/0'
Eu tenho um script que é executado como o usuário "monitor". Nós o executamos em uma sessão de tela para ver a saída na tela. O problema é que temos um número de usuário que faz login com sua própria conta (ou seja, bob, james, susie, etc ...) e, em seguida, eles sudo para o usuário "monitor". Dar-lhes acesso ao usuário "monitor" está fora de questão.
Estou usando uma função de wrapper em torno de screen
para o (s) usuário (s) para o qual eu sudo su
. Esta é a função do wrapper que adicionei ao (s) usuário (s) ~/.bashrc
:
function screen() { /usr/bin/script -q -c "/usr/bin/screen ${*}" /dev/null }
Isso me permite usar todas as opções e parâmetros para screen
que eu possa querer usar. Estou pensando em colocar essa função em todo o sistema.
Supondo que eles sejam SSH no host, você pode adicionar as chaves ssh públicas para cada usuário que precisa acessar a conta do monitor no arquivo ~ monitor / .ssh / authorized_keys. Em seguida, na máquina remota de cada usuário, eles podem executar
ssh -t [email protected] screen -RD
Supondo que estamos falando sobre esse erro:
$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.
Aqui está um one-liner (pode ser usado como "alias gobob", por exemplo):
sudo su - bob -c "script -c bash /dev/null"'
Explicação:
Isso iniciará um shell (como shell de login) como user bob. Usuário bob começa script
, que é dito para invocar um bash (pode ser traço ou ksh ...) e uma cópia da sessão é jogada fora.
Provavelmente, teria que alterar as permissões no dispositivo em questão ou adicionar um monitor a um grupo que tenha permissão para ler esse dispositivo. Essa seria minha primeira inclinação. Mas você teria que pesar as implicações de segurança disso.
Você diz que faz:
sudo su "monitor" -
Eu estou querendo saber sobre o traço à direita. Eu costumo fazer:
sudo su - username
O traço (pela página su man) diz ao su para "fazer do shell um shell de login". Isso significa que ele irá fornecer todos os scripts de inicialização do shell e definir coisas como PATH e HOME corretamente.
Acabei de acertar este problema. Resolvi com chmod +rw $(tty)
antes de executar o sudo.
O problema com essa solução é que qualquer um pode se conectar e espionar seu terminal depois disso.