追加:この質問は今、この質問に含まれていると思います: 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"'
-t
オプションはあなたが望むことをしますか?
-t疑似tty割り当てを強制します。これは、リモートマシンでarbi- の画面ベースのプログラムを実行するために使用できます。メニューサービスを実装するとき。複数の-t オプションは、sshにローカルttyがない場合でも、tty割り当てを強制します。
そう:
laptop> ssh -t server.com screen -dr pts-2
これは私のインストールで動作するようです。
使用 -t
オプションをsshに追加して、直接コマンドを実行しながら端末を割り当てます。
laptop> ssh -t server.com screen -dr pts-2
私は似たようなものに取り組んでいますが、そこまでは行きませんでした。あなたの解決策が私の問題を解決したので、これが私の提案です:
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"
同じセッションに常に接続したい場合は、それがアクティブであるか、切り離されているか、まだ存在していない場合でも:
ssh -t user @ server screen -xR screenName
同じですが、他のptyですでにアクティブになっている場合は、新しいセッションを作成します。
ssh -t user @ server screen -rR screenName
私はこれを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"
}