byobuを使用してリモートサーバーに接続し、コマンドを実行します。

byobuを使用してリモートサーバーに接続し、コマンドを実行します。

私は通常sshを使用して接続するリモートサーバーを持ち、接続後にbyobuが自動的に起動します(スクリプトを使用して設定された.profileの行を介してbyobu-enable)。それでは、リモートのjupyterノートブックを使用するために同じサーバーに接続するときに別のワークフローを設定したいと思います。リモートサーバーがjupyterを起動し、sshにポートをjupyterクライアントシステムに転送させたいと思います。私はローカル.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

問題は、「RemoteCommand」がbyobuの起動を妨げるため、コマンドを接続して実行した後は、クールなマルチプレックス画面の代わりにプレーンテキストシェルが残るということです。接続中にbyobuとリモートコマンドの両方を取得する方法は?

重要なことは、特定のワークフローが必要であると指定しない限り、すべての接続でこれらのコマンドを実行したくないことです。明らかにbyobuに接続してからサーバー上でスクリプトを実行してワークスペースを設定できますが、これらすべてをクライアントで1つの自動化されたコマンドでラップしたいと思います。より良いことは、カスタムコマンドを実行するだけでなく、複数のウィンドウと各ウィンドウに異なるコマンドを持つカスタムbyobuワークスペースを設定する別の設定ファイルを持つことです。

答え1

答えの核心はこのスタックオーバーフローの質問ssh -t対話型疑似端末を開くには、このフラグを使用します。その後、コマンドをbyobuセッションにbyobu new-session渡します。byobu send-keys

まず、.ssh/configを作成します。地元のマシンはSSH接続を確立します。

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

次に、ホームディレクトリにスクリプトを配置します。離れてbyobuセッション用のマシンを設定します。 "jupyter"セッションが作成されたかどうかをテストするには、コマンドリストではなくスクリプトが必要です。名前を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

実行可能にする

chmod +x remote-jupyter-startup.sh

地元の私が運転できる機械

ssh remote-server-jupyter -t "./remote-jupyter-startup.sh;"

関連情報