ターミナルウィンドウをリモートで監視するにはどうすればよいですか?


8

Centos 7サーバーでスクリプトを実行しているアクティブなターミナルウィンドウを使用して、以前にオフィスを離れました。これで自宅からSSHで接続できたので、それがどこにあるのかを確認したい。これは可能ですか?ここから同じターミナルウィンドウに再度参加できますか?



また、以下のすべての回答にtmate.ioを追加したいと思います
webKnjaZ 2017年

1つのオプションは次のとおりですstrace -e write -p 12345(関心のあるプロセスのPIDを置き換えます)。別のオプションは次のとおりですstrace -e read -p 12345(ターミナルエミュレータのpidを置き換えます)。原則として、ptraceシステムコールを使用して情報を収集するのと同じ方法でプログラムをstrace作成し、それを自分の端末に直接書き込むことができます。そのようなプログラムが存在するかどうかはわかりませんが、質問で指定された要件をカバーします。
kasperd 2017

可能な方法の1つは、ターゲットコンピューターでRPC(リモートプロシージャコール)を有効にしてから、(リモートで)画面に接続して、個々のウィンドウを含む画面を制御できるようにします。注:これにより脆弱性が生じるため、完了したら必ずRPCを無効にしてください。
user3629249 2017

回答:


14

@Svenが述べたように、最良のオプションはscreenまたはを使用することtmuxです。これらは「ターミナルマルチプレクサ」と呼ばれるツールです。これらを使用すると、実際のログインに接続したり、接続を解除したりできるシェルセッションを作成できます。これらのツールは、他の端末から作業を確認するのに役立つだけでなく、他のユーザーとセッションを共有したり、インターネット接続が失われた場合でもコマンドが停止しないことを確認するなど、他の機能を備えています。を検索している場合はscreen、「GNU Screen」を検索してみてください。これらのツールはどちらも、ほとんどのLinuxシステムで使用できます。

通常、セッションを開始し、そのセッション内でコマンドを実行します。ただし、コマンドを既に開始している場合は、実行中のコマンドをスクリーンセッションに移動する方法に関する記事を参照することをお勧めします。ただし、重要なもので初めてこれを試すことはお勧めしません。この質問はいくつかの役に立つかもしれません:

既に実行中のプロセスをScreenに移動する

プロセスが実行されているかどうかを確認するだけの場合、私のお気に入りのツールはstraceです。このツールを使用すると、プロセスによって行われた各カーネル呼び出しを確認できます。出力を理解するにはある程度のスキルが必要ですが、少なくともプロセスが実行されているかどうか、十分に注意して監視すると、開いているファイル名を把握できる可能性があります。そのためには、まずPIDを見つけます。おそらくを検索してps aux|grep yourcommandから、次のようにします。

strace -fp YOUR_PID

^ Cでそれから抜け出すことができます。再接続することはできないかもしれませんが、それが何をしているかを知りたいだけなら、それで十分でしょう。


なぜそれはあなたが再接続することを可能にしないのですか?
HSchmale 2017年

@HSchmale私はあなたの質問を理解していることを確信できません。straceを参照している場合、そのプログラムは端末をまったく提供しません。カーネルの呼び出しが行われたことを示しているだけです。多くの場合、プロセスがハングしていると思われるとき、straceはその時点で動作している正確なファイルを表示しているので、プロセスがどこにあり、ハングしていないことがわかります。
DKing 2017年

straceを再接続できないと思いましたが、端末を再接続するつもりでした。
HSchmale 2017年

9

それを行う1つの方法:TMUX

ほとんどの回答がすでに指摘したように-既存のSSHセッションの場合- コマンドでtmux(またはscreen)を使用します

tmux

これで、新しいbashセッションが開始され、プログラム/コマンドを開始できます。いつでも(ウィンドウを閉じるのではなくCTRL + Dを使用せずに)閉じて、同じマシンの同じユーザーへのSSH接続を確立してコマンドを書き込むことで、後で戻ることができます。

tmux attach

また、次のように名前を付けることで、複数の tmuxセッションを持つことができます

tmux new -s myname

あなたはtmuxあなたのユーザーのために開いているすべてのセッションのリストを見ることができます

tmux ls

と名前付きtmuxセッションにアタッチします

tmux a -t myname

tmux cheat sheet ここで包括的な検索します

実行中のプログラムの場合

答えは、これまであなたが他にすでに実行中のプロセスを動かすことができるという事実を認識することがないように見えるtmux/ screenとして、この答えは指摘します。仕事をするプログラムが呼び出されreptyr、Ubuntu / Debianの下で簡単にインストールできます

sudo apt-get install reptyr

その後、実行中のプログラムのプロセスIDを確認し(例:topまたはhtop)、tmuxセッションを開始し、簡単な

reptyr PID

実行中のプロセスをtmuxbashセッションに再アタッチします。


5

将来は、screenまたはtmuxを使用して、実行中のセッションを再接続できます。


3

私は屏風を使ってきましたが、信じられないほど強力です。Byobuは、GPLv3オープンソースのテキストベースのウィンドウマネージャーおよびターミナルマルチプレクサーです。

したがって、「byobu」と入力するだけで、byobuセッションを開くことができます。次に、Ctrl + F2で新しいタブを作成し、Ctrl + F3で戻る、Ctrl + F4で進む間でタブ間を移動できます。Ctrl + F6でタブを閉じるか、Shift + F6でセッションから切り離すことができます。その後、単に「byobu」と入力するだけで、セッションに再接続します。

Byobuは垂直および水平分割をサポートしています。Ubuntu / Debian、CentOS / Fedora / RedHat、FreeBSDで利用できます。


byobuをターミナルマルチプレクサと呼ぶのは少し誤解を招くようです。これは実際には単なるフロントエンドでtmuxありscreen、多くの検索結果は、箱から出した場合よりも優れたユーザーエクスペリエンスを提供します。
Bレイヤー

2

すでに指摘したように、将来的には、tmuxまたはscreenを使用することをお勧めしますが、それは事前に考えて初めて機能します。

私は何度もあなたの状況にいます。実行したままの端末がオフィスのデスクトップPCにあった場合は、PCにSSHで接続してVNCサーバーを起動できます。そうすれば、少なくとも開いているターミナルを確認できます。


0

誰もが述べたように、tmuxを使用できます。screenは、複数の人と画面を共有したい場合には役に立ちません。

何よりも、https: //tmate.io/を試して、localmachineにも一時的にアクセスできるようにすることをお勧めします。tmateは上記すべてをサポートします:)

https://tmate.io/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.