Conecte-se ao servidor remoto com byobu e execute o comando

2

Eu tenho um servidor remoto ao qual normalmente me conecto com o ssh e, após a conexão, o byobu é iniciado automaticamente (por meio de uma linha no perfil. configurada com o script byobu-enable ). Agora quero configurar um fluxo de trabalho diferente para quando eu me conectar ao mesmo servidor para usar notebooks remotos da jupyter. Eu gostaria que o servidor remoto inicializasse o jupyter e, em seguida, fizesse o ssh encaminhar a jupyter port para minha máquina cliente. Eu adicionei isto ao meu local .ssh / config

Host remote-server-jupyter
    HostName      123.45.6.789
    User          pgcudahy
    LocalForward  8889 localhost:8889
    ServerAliveInterval 30
    ServerAliveCountMax 3
    RemoteCommand cd ~/Projects && jupyter notebook --no-browser --port=8889

O problema é que o "RemoteCommand" interfere na inicialização do byobu, de modo que depois de conectar e executar o comando, fico com um shell de texto simples e não com uma tela multiplexada. Como posso obter comandos byobu e remotos na conexão?

Uma coisa importante é que não quero que esses comandos sejam executados em todas as conexões, apenas se especificar que desejo um determinado fluxo de trabalho. Obviamente, posso me conectar ao byobu e, em seguida, executar um script no servidor para configurar meu espaço de trabalho, mas gostaria de incluir tudo isso em um comando automatizado do cliente. Melhor ainda seria ter perfis separados que não apenas executassem comandos personalizados, mas configurassem um espaço de trabalho byobu personalizado com várias janelas e comandos diferentes em cada janela.

    
por pgcudahy 02.03.2018 / 08:56

1 resposta

1

A chave para a resposta estava em esta questão de estouro de pilha . Use o sinalizador ssh -t para abrir um pseudo-terminal interativo. Então byobu new-session e byobu send-keys para passar comandos para uma sessão byobu.

Primeiro faça um .ssh / config na máquina local para configurar a conexão ssh

Host remote-server-jupyter
    HostName      123.45.6.789
    User          pgcudahy
    LocalForward  8889 localhost:8889
    ServerAliveInterval 30
    ServerAliveCountMax 3

Em seguida, coloque um script no diretório inicial da máquina remote que configura a sessão byobu. Eu preciso de um script em vez de uma lista de comandos para que eu possa testar para ver se uma sessão "jupyter" já foi criada. Vou chamá-lo de remote-jupyter-startup.sh

#!/bin/bash
# Test if there's a 'jupyter' session already set up
if [ -z "$(byobu list-sessions | grep jupyter)" ]
    # If not, then set up the session
    then
    # Create a new detached session named 'jupyter'
    byobu new-session -d -s jupyter
    # Pass a 'cd' command to the session, then 'C-m' to execute
    byobu send-keys -t jupyter 'cd ~/Projects' 'C-m'
    # Pass the 'jupyter' command to the session, then 'C-m' to execute
    byobu send-keys -t jupyter 'jupyter notebook --no-browser --port=8889' 'C-m'
    # Create a second window in the session
    byobu new-window -t jupyter:1
fi
# Attach to the session
byobu attach-session -t jupyter

Torne-o executável

chmod +x remote-jupyter-startup.sh

Agora, na máquina local , posso executar

ssh remote-server-jupyter -t "./remote-jupyter-startup.sh;"
    
por 05.03.2018 / 10:41

Tags