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;"