web-dev-qa-db-ja.com

ネットワークの中断後、自動的に(またはより簡単に)スクリーンセッションに再接続する

追加:この質問は今、この質問に含まれていると思います: sing GNU Screen完全に透過的かつ自動的に

この関連質問も参照してください:
https://superuser.com/questions/147873/ssh-sessions-in-xterms-freeze-for-many-minutes-whenever-they-disconnect

元の質問:

マシンにsshしてすぐに特定のスクリーンセッションに再接続する方法があったらいいですね。あなたはこれを行うことができます:

laptop> ssh server.com screen -ls

そして、server.comで利用可能な画面のリストが次のように表示されます[1]:

123.pts-1
456.pts-2

そして、あなたはこれをやろうとするかもしれません:

laptop> ssh server.com screen -dr pts-2

しかし、「端末に接続する必要がある」と言って失敗します。最初にsshを実行してから、server.comで「screen -dr pts-2」を実行する必要があります。これは、接続が不安定で接続が頻繁に切断される場合は適切ではありません。ラップトップで単純な「上矢印入力」で再開できるようにしたい。 (または、おそらくそれをさらに自動化します。)

私はこの問題に対して非常に巧妙な解決策を用意しています。これを回答として投稿し、これを対処するための正しい方法を支持して、忘却に反対票を投じることを願っています。


[1]または、「screen -S foo」や「screen -S bar」のような名前でスクリーンセッションを作成すると、次のようなわかりやすいリストが表示されます。

123.foo
456.bar

たとえば、「screen -dr foo」で再接続できます。


この質問への回答を組み込んだミニ画面チュートリアル:

Server.comにログインして、

screen -S foo 

その後、そのセッションから再びログアウトすることはありません。他の場所から再接続するには、

ssh -t server.com screen -dr foo

再接続できる利用可能な画面を一覧表示するには:

screen -ls

または、もちろん、

ssh server.com screen -ls

server.comの利用可能な画面をリモートで確認します。

以下のJasonの回答に基づいて、次のエイリアス(tcsh)を使用して、名前付き画面が存在する場合はそれに接続するか、存在しない場合は作成して接続します。

alias ssc 'ssh -t \!:1 "screen -S \!:2 -dr || screen -S \!:2"'
55
dreeves

-tオプションはあなたが望むことをしますか?

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

そう:

laptop> ssh -t server.com screen -dr pts-2

これは私のインストールで動作するようです。

58
Greg Hewgill

使用 -tオプションをsshに追加して、直接コマンドを実行しながら端末を割り当てます。

laptop> ssh -t server.com screen -dr pts-2
2
Douglas Leeder

私は似たようなものに取り組んでいますが、そこまでは行きませんでした。あなたの解決策が私の問題を解決したので、これが私の提案です:

ssh -t server.com "screen -S foo -rd || screen -S foo"

これは、fooという名前の既存の画面を開こうとするだけで、存在しない場合は作成します。これをラップトップのランチャーに入れますので、ワイヤレスネットワークが終了したときに、中断したところから開くことができます。

デフォルトの画面シェルが少し弱いことに気付いたので、ホーム環境を少し改善する改善は次のとおりです。

ssh -t server.com "screen -S foo -rd || screen -S foo bash -l"
2
Jason

同じセッションに常に接続したい場合は、それがアクティブであるか、切り離されているか、まだ存在していない場合でも:

ssh -t user @ server screen -xR screenName

同じですが、他のptyですでにアクティブになっている場合は、新しいセッションを作成します。

ssh -t user @ server screen -rR screenName

1
Oguz

私はこれをOS X .bash_profileで動作するように変換しましたが、1つ追加しました。2番目のパラメーターが指定されていない場合、セッション「デフォルト」が開始されます。

function ssc() {
    if [[ -z $2 ]]; then
        screen="default"
    else
        screen=$2
    fi
    ssh -t $1 "screen -S $screen -dr || screen -S $screen"
}
1
udondan