画面とSSHを効果的に使用するには?

画面とSSHを効果的に使用するには?

ログインが常にscreenセッションに再接続されるようにSSHとscreenを設定したいと思います。理想的には、Cdを押すとセッションは終了せずに分離されます。これはどのように達成できますか? SSHライフをより簡単にできる他の便利な設定は何ですか?

答え1

SSH経由で接続すると自動的にスクリーンセッションに入るように、すべてのサーバーに対して次のことが行われました。

ユーザーアカウントの ~/.bashrc に以下を追加します。

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ] 
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  screen -RR -S main || echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

main がない場合は main という画面セッションが開始され、存在する場合は再接続されます。これは、さまざまなサービスに対して別々に実行されるさまざまなスクリーンセッションがあり、そのセッションに接続したくないためです。

答え2

リモートサーバーの.bash_profileには次のものがあります。

if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
    reattach() {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

これは2つのことを行います。まず、シェルを置き換え、ssh-agent接続を続行するシェル関数を設定し、次に数秒後にその関数を呼び出します(画面が表示されたくない場合)。開始)。

最初の句は、screen()が実行されておらず、端末()に接続されておらず、sudo(時々変更されない)が実行されていない場合はiftrueです。-z "${STY}"-t 0$USER

この関数は最初にsshを呼び出すためにreattachssh-agentポートが有効になっていることを確認します。-n "${SSH_AUTH_SOCK}"次に、~/.ssh/agent-scriptすべてのエントリを現在アクティブなソケットファイルに置き換え、$SSH_AUTH_SOCK環境変数()を新しい値に置き換えます。その後、スクリプトはscreen現在のシェルを単一のセッションに置き換えます(セッションが1つだけ存在することを確認してください)。関数のすべての引数はreattachcommand()に渡されます${1:+"$@"}

最後の部分は、すべての死んだセッション()を削除して、ユーザー(私)に画面がすぐに起動し、-を押してシェルに戻ることができることscreen -wipeを知らせることから始まります。その後、5秒待って関数を呼び出します。CtrlCreattach

答え3

まず、byobuを使用している場合は、常に自動的にbyobuを起動するように新しいシェルセッションを設定できます(最新バージョンではtmuxをバックエンドとして使用できますが、これは本質的に良い画面構成です)。 byobuが本当に望まない場合は、.profile別のシェル設定スクリプトをifで編集してexec screen手動で接続するように画面を設定できますTERM != "screen"

これが気に入らない場合は、authorized_keysファイルを使用して特定のコマンドを実行して特定のキーに関連付けることができます(必要なだけのキーを持つことができます)。man sshd詳細より。画面が実行中で接続されていることを確認するスクリプトをコマンドとして実行し、そうでない場合は新しいセッションを開始することをお勧めします。

切断するにはCtrl-Dを押します。詳しくは画面をご覧ください.screenrcman screen「bindkey」を探しています。

答え4

screen -dAr default || screen -AS default私のために動作します。私のアイテムに追加しました。~/.bashrc

スイッチの簡単な説明:

  • d- 画面がまだ別のセッションに接続されている場合は、別のセッションから切り離してください。
  • A- 画面のウィンドウを新しい端末サイズに合わせて調整します。
  • r default- Defaultという画面が付いています。

最初の画面コマンド(前のコマンド||)が失敗した場合は、2番目の画面コマンドを実行します。

  • A- 上記のように...
  • S default- 名前で新しいスクリーンセッションを作成する基本

関連情報