ログインが常に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(時々変更されない)が実行されていない場合はif
trueです。-z "${STY}"
-t 0
$USER
この関数は最初にsshを呼び出すためにreattach
ssh-agentポートが有効になっていることを確認します。-n "${SSH_AUTH_SOCK}"
次に、~/.ssh/agent-script
すべてのエントリを現在アクティブなソケットファイルに置き換え、$SSH_AUTH_SOCK
環境変数()を新しい値に置き換えます。その後、スクリプトはscreen
現在のシェルを単一のセッションに置き換えます(セッションが1つだけ存在することを確認してください)。関数のすべての引数はreattach
command()に渡されます${1:+"$@"}
。
最後の部分は、すべての死んだセッション()を削除して、ユーザー(私)に画面がすぐに起動し、-を押してシェルに戻ることができることscreen -wipe
を知らせることから始まります。その後、5秒待って関数を呼び出します。CtrlCreattach
答え3
まず、byobuを使用している場合は、常に自動的にbyobuを起動するように新しいシェルセッションを設定できます(最新バージョンではtmuxをバックエンドとして使用できますが、これは本質的に良い画面構成です)。 byobuが本当に望まない場合は、.profile
別のシェル設定スクリプトをifで編集してexec screen
手動で接続するように画面を設定できますTERM != "screen"
。
これが気に入らない場合は、authorized_keys
ファイルを使用して特定のコマンドを実行して特定のキーに関連付けることができます(必要なだけのキーを持つことができます)。man sshd
詳細より。画面が実行中で接続されていることを確認するスクリプトをコマンドとして実行し、そうでない場合は新しいセッションを開始することをお勧めします。
切断するにはCtrl-Dを押します。詳しくは画面をご覧ください.screenrc
。man screen
「bindkey」を探しています。
答え4
screen -dAr default || screen -AS default
私のために動作します。私のアイテムに追加しました。~/.bashrc。
スイッチの簡単な説明:
d
- 画面がまだ別のセッションに接続されている場合は、別のセッションから切り離してください。A
- 画面のウィンドウを新しい端末サイズに合わせて調整します。r default
- Defaultという画面が付いています。
最初の画面コマンド(前のコマンド||
)が失敗した場合は、2番目の画面コマンドを実行します。
A
- 上記のように...S default
- 名前で新しいスクリーンセッションを作成する基本。