web-dev-qa-db-ja.com

デスクトップからリモートサーバー上のsshを介してコマンドでscreenセッションを起動するにはどうすればよいですか?

デスクトップ上の単一のsshコマンドからリモートサーバーのスクリーンセッションを起動できるようにしたいのですが。ただし、画面には端末が必要なようですが、sshを介してコマンドを実行するときには利用できません。

だから明らか

ssh [email protected] screen "tail -f /var/log/messages"

(例として)機能せず、

Must be connected to a terminal.

Sshが画面下でコマンドを起動して、後でログインして手動で起動した画面セッションに接続するのと同じように接続できるようにしたい。

Sshに-tオプションを使用してみてください

ssh -t [email protected] screen "tail -f /var/log/messages"

Man sshから

-t疑似tty割り当てを強制します。これは、リモートマシン上でarbi-
の画面ベースのプログラムを実行するために使用できます。たとえば、メニューサービスを実装する場合など、
は非常に役立ちます。複数の-t 
オプションは、sshにローカルttyがない場合でも、tty割り当てを強制します。
79

以下を使用できます。

ssh root@Host screen -m -d "tail -f /var/log/messages"

これにより、コマンドが実行されている切り離された画面が起動します。

   -m   causes screen  to  ignore  the  $STY  environment  variable.  With
        "screen  -m"  creation  of  a  new session is enforced, regardless
        whether screen is called from within  another  screen  session  or
        not.  This  flag has a special meaning in connection with the `-d'
        option:

   -d -m   Start screen in "detached" mode. This creates a new session but
           doesn't  attach  to  it.  This  is  useful  for  system startup
           scripts.
33
Alakdae

遅い答えですが、これは私がやっていることです。これを行うエイリアスを作成します(これをtと呼びましょう)。

ssh $MYSERVER -a -x -t screen -xRR -A -e^Zz -U -O

これは、sshにエージェントとX11転送を無効にするように指示し、screenに実行中のセッションにアタッチし、必要に応じて新しいセッションを開始するように指示し、ブレークアウトコマンドとして^Zを使用し、UTFを使用します-8と端末についてスマートになります。

これはすべて、ターミナルを開いてtと入力すると、$ MYSERVERでスクリーンセッションを開くことを意味します。次に、別のターミナルを開いて同じことを行うと、同じセッションに別のウィンドウが表示されます。

同じ画面セッションに複数のターミナルウィンドウを表示して、2つの画面タブを同時に表示できるのは本当に素晴らしいことです。

8
w00t

サーバーの〜/ .bashrcファイルに次のように入力すると、サーバーに初めてログオンしたときにscreenセッションが開始されます。すでに実行されている場合は、そのセッションに再接続します。

これは非常に便利です。

if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
    export SCREEN_EXIST=1
    screen -DRi
fi
4
Brent