Como executar os arquivos de script (.sh) em um novo terminal depois de conectar ao servidor Ubuntu 16.04 via ssh?

2

Eu tentei várias maneiras, como

terminator -x abc.sh O comando acima me dá este erro:

You need to run terminator in an X environment. Make sure $DISPLAY is properly set

Eu também tentei

gnome-terminal -x ./abc.sh

O comando acima me dá o erro abaixo

Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Failed to parse arguments: Cannot open display:
    
por Avery 26.05.2018 / 14:40

3 respostas

3

Assumindo o Ubuntu para o Ubuntu

  • Se você instalou o software relevante no servidor, poderá fazer login remotamente com ssh -X e, em seguida, executar programas de aplicativos gráficos como terminator e gnome-terminal . Veja este link,

    Qual é a maneira mais simples de ter acesso remoto à GUI ao Ubuntu 16.04" server "do Ubuntu 16.04" desktop "?

  • Você também pode simplesmente iniciar outras janelas de terminal localmente e, nessas janelas, fazer login remotamente com ssh e, dessa forma, executar vários programas de aplicativo em modo texto no servidor (cada um em sua própria janela de terminal).

Se você usa a área de trabalho do Windows 10 e deseja se conectar ao seu servidor ubuntu

Uma solução simples é instalar e usar o Putty no Windows de acordo com o seguinte link,

www.putty.org/

PuTTY is an SSH and telnet client, developed originally by Simon Tatham for the Windows platform. PuTTY is open source software that is available with source code and is developed and supported by a group of volunteers.

You can download PuTTY here.

Você pode iniciar uma ou mais janelas do Putty e executar tarefas diferentes via ssh .

Como descrito no comentário de @SergiyKolodyazhnyy, você pode usar xrdp para abrir a sessão de área de trabalho remota do Windows para o Ubuntu.

Como descrito em um comentário de @PerlDuck, você pode instalar e usar um servidor X no Windows para poder executar programas gráficos por meio de ssh , mas, de acordo com sua pergunta original, pode ser um exagero.

    
por sudodus 26.05.2018 / 15:40
2

Aqui está a coisa: terminator e gnome-terminal são aplicativos GUI. Se o seu script não requer GUI e é um script de shell simples, então você pode executá-lo em sua sessão ssh sem precisar de um emulador de terminal. Obviamente, seu script precisa estar no sistema de arquivos em que você está tentando executar o script.

Se por algum motivo você realmente precisar de terminator ou gnome-terminal , você sempre poderá usar o xrdp para iniciar a sessão da área de trabalho remota. É claro que se o sistema Ubuntu que você está tentando acessar tiver um servidor X; Computadores servidores, por exemplo, muitas vezes não têm qualquer GUI, porque é um risco de segurança.

    
por Sergiy Kolodyazhnyy 27.05.2018 / 11:10
1

É possível executar um aplicativo que requer GUI da sessão SSH para a sessão Desktop, se você realmente precisar dele. Eu estou usando a seguinte abordagem para lançar máquinas virtuais VMWare quando eu precisar deles, mas eu não estou na frente do computador.

Gostaria de enfatizar que você mencionou que está se conectando ao Ubuntu Server, que não possui o ambiente Desktop instalado por padrão. E nesse caso vale a pena usar tmux ou screen , ou empurrar o script para o segundo plano ou usar uma segunda sessão SSH. Se um ambiente de área de trabalho for instalado no servidor , as etapas a seguir poderão ser aplicadas.

Os scripts a seguir funcionam com Lightdm e Unity, que são padrão para o Ubuntu 16.04.

1. O primeiro requisito é que o usuário esteja logado na sessão Desktop. Que eu estou usando para conseguir isso é o seguinte script ( fonte e explicações ):

#!/bin/bash

# NAME: lightdm-auto-login

main() {
    # If the file '/etc/lightdm/lightdm.conf' exists create a backup copy
    [[ -f /etc/lightdm/lightdm.conf ]] && mv /etc/lightdm/lightdm.conf{,.bak}

    # Create autologin configuration for the current $USER = $1
    echo -e "[Seat:*]\nautologin-user=$1" > /etc/lightdm/lightdm.conf

    # Restart 'lightdm' while autologin option is enabled
    systemctl restart lightdm.service

    # Wait for a moment to complete the login process and remove the conf file
    sleep 30 && rm /etc/lightdm/lightdm.conf

    # Restore the backup if exists
    [[ -f /etc/lightdm/lightdm.conf.bak ]] && mv /etc/lightdm/lightdm.conf{.bak,}
}

# Execute the 'main()' function with root privileges in the background 'sudo -b'
# Pass the curent $USER as arg (https://unix.stackexchange.com/a/269080/201297)
sudo -b bash -c "$(declare -f main); main $USER"
  • O script deve ser executado como usuário regular (que pertence ao grupo sudoers).

  • Eu preferiria colocar o script em /usr/local/bin para ser acessível como todo o sistema de comandos shell. Não se esqueça de torná-lo executável.

2. Em segundo lugar, poucas variáveis de ambiente (como $DISPLAY , etc.) devem ser exportadas da sessão Desktop para a sessão SSH. O script a seguir fará isso e também lançará os comandos que são passados como parâmetros posicionais ( fonte e explicações ):

#!/bin/bash -e

# NAME: gui-launcher

# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done

# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")

# Execute the input command
nohup "$@" >/dev/null 2>&1 &

exit 0
  • O script funcionará até que o usuário esteja logado, incluindo uma tela bloqueada.

  • Eu preferiria colocar o script em /usr/local/bin para ser acessível como todo o sistema de comandos shell. Não se esqueça de torná-lo executável.

3. Uso:

  • Estabeleça a sessão SSH;
  • Executar lightdm-auto-login ;
  • Execute gui-launcher <commands or script> , para exemplo :

    gui-launcher gnome-terminal -x bash -c "<my command or script>; exec bash"
    

    Observe o último subcomando exec bash manterá aberto o gnome-terminal aberto, depois que o comando anterior terminar.

4. Demonstração:

    
por pa4080 27.05.2018 / 13:24