web-dev-qa-db-ja.com

SSH経由でコンピューター上の開いているターミナルにアクセスできますか?

tmuxまたはscreenを使用せずに、リモートコンピューターからopenターミナルにアクセスします。これにはいくつかの理由がありますが、最も簡単なのは、前もって計画していなかった状況で着陸し続け、職場でPCで何か大きなものを実行し、家に帰ってからsshで確認したいということです。

本質的に、私はすでにコンピュータで実行されている端末に接続してその出力を表示する方法を探しています。

今、私はあなたがこれを行うことができないと言ういくつかのスレッドがあることを知っています( this one など)、および単にscreentmuxを推奨する他のスレッド( this one)this one または this one )。私が探しているのは、実行中の端末プロセスに直接アクセスする方法、または少なくともその端末のキャッシュされた出力を見る方法です。その端末でコマンドを入力できる必要は必ずしもありません。

これを行う方法はありますか?そうでなければ、ハックに関するアイデアはありますか?私はおそらく、stdout、stderr、およびコマンドを自動的にファイルに記録する方法を見つけることができると考えていました(おそらく、すべてを記録するbash履歴の巧妙な調整?)

2
ck4e

単にターミナルの構築方法が原因で、everythingにアクセスすることはできません。つまり、実行中のターミナルを表示することはできません andscreenまたはtmuxセッションなど、上記の端末内で実行中の取り外し可能なセッションがない場合、または開始していない場合は、対話しますscriptコマンドを介してロギングするコマンド。

できることは、部分的にviewSudo cat /dev/vcs1コマンドを介してTTYです。 /dev/vcs[1-6]は、それぞれのTTYコンソールに対応しています。これは、それぞれのTTYのスクロールバックバッファーサイズによって制限されます。つまり、特定の行数までメモリに保持されているもののみを表示できます。もちろん、これは muruの答え に示すように行数を増やすように調整できます。または、おそらく試してみてください

setterm -file log.txt -dump [ttynumbers]

this ssh question で言及されました。

結局のところ、bodhi.zazenは comment で適切に注意し、screenまたはtmuxの使用を拒否することが最大の問題であると述べました。私は完全に理解しています。長時間実行するプログラムを自分で追跡することを忘れることがよくありますが、いくつかのコマンドを使用して先に考え始める必要があります。

4

これに gnome-terminal のタグを付けているため、バージョンによっては、出力の一部を表示できる場合があります。 このブログ投稿 から、著者はGNOMEターミナルが「無制限」スクロールバックに対して何をするかを見たいと思っていました。

gnome-terminalが開いているファイルを見ることができたので、lsofが助けになりました。その後、私はそれが卑劣であることを発見し、/tmp/vteXYZ1tvと呼ばれるいくつかのファイルを開いていましたが、すでにそれらを削除していました。したがって、ブラウジング時にそれらを見ることができず、プログラムを閉じると削除されます。 [...]しかし、私の方法(おそらく他にもあります)は、ls -l /proc/<gnome-terminal pid>/fdを実行して、それらが指しているものを確認することでした。次に、catこれらを使用して、新しいファイルを作成できます。これらは、ターミナル出力のそのままのコピーです。圧縮なし。いいえ、別に。

しかし、新しいバージョンでは、ファイルは暗号化されることになっています。 この回答 から:

vte-0.40(Ubuntu 15.10 W.W.に表示される可能性が高い)は、これらのファイルを圧縮および暗号化します。これにより、必要なストレージがそのサイズの約3〜4倍に縮小されます(アプリがX量のデータをプレーンテキストとして生成する場合、X/4〜.X/3は必要なストレージの合理的な見積もりです) 、また誰かがハードドライブへの生のアクセスを取得した場合のプライバシー/セキュリティの問題も取り除きます。

今後の出力のみが必要な場合は、プロセスを reptyrを使用する新しいTTY にドラッグしてみてください。

2
muru

端末内で実行されているプロセスによっては、端末に表示されているものではなく、状態とそのプロセスによって行われたアクションを覗き込むで成功する場合があります。

特定のプロセスのPID(プロセスID)を何らかの方法で把握したと仮定した場合のいくつかの例(たとえば、pidofまたはpsを使用):

  • 指定されたツールがサブコマンドを1つずつ起動する場合、psを使用して実行中のサブコマンドを確認します。

  • 指定されたツールが作業ディレクトリを変更することがある場合は、/proc/<PID>/cwdで確認してください。

  • 与えられたツールが連続して多くのファイルを操作する場合、/proc/<PID>/fdの下で開いているファイルを確認してください。現時点で何も表示されない場合は、プロセスが閉じたばかりで、次のプロセスを開こうとしている可能性があります。そのディレクトリの内容をもう一度確認してください。

  • コマンドが標準のread/write syscallsを使用して1つの巨大なファイルで動作する場合、/proc/<PID>/fdでファイル記述子番号を見つけ、/proc/<PID>/fdinfoで対応するファイルの現在のオフセットを確認できます。コマンドがpread/pwriteを代わりに使用する場合、次の箇条書きを参照してください。

  • straceを使用してプロセスに接続すると、その処理を確認できます:strace -p <PID>。その後すぐに終了します Ctrl+C (straceのみを終了し、トレースしているアプリケーションは終了しません)。出力を調べて、アイデアを与える可能性のある関連するものを探します。たとえば、-e traceオプションを使用して、この出力をファイル操作のみに制限します。表示されますアプリケーションによって開かれているファイル名、およびpread/pwrite操作が発生するオフセット。

0
egmont

コメントから、いくつかの潜在的な解決策がありますが、グラフィカル端末でコマンドを実行する前にそれらをすべて実装する必要があります。

たとえば、 https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/13564 を参照してください

そのため、同じXセッション内のユーザーは閉じたタブに再接続できません。

Muruの提案どおりにreptyrを試すことができます。これはクールなソリューションですが、最初からsshセッションを計画する方が良いでしょう。

より良い作業戦略を開発する必要があります。

  1. Screenまたはtmuxなどを使用します。これらのツールは、まさにこのシナリオ用に設計されました。

個人的に私はスクリーンを使い慣れているのでスクリーンを使用し、あなたが述べる理由のために、私は常にsshを介してスクリーンセッションを使用します。多くの場合、ホスト上のVMごとに1つ以上のスクリーンセッションがあります。

  1. VNCサーバーを使用します。セッションをssh(VNC-over-SSH)で実行するか、より高速で安全なFreeNXを使用できます。 SSHなしの「インターネット」上でVNCサーバーを実行しないでくださいOR FREENX

VNC over ssh- https://www.cyberciti.biz/tips/tunneling-vnc-connections-over-ssh-howto.html

FreeNX- https://www.howtoforge.com/tutorial/freenx-ubuntu-14-04-trusty-tahr/

  1. Xpraを使用できます

https://help.ubuntu.com/community/Xpra

http://xpra.org/

Xpraを使用すると、グラフィカルターミナルを起動して再接続できますが、ターミナルを起動する前に再度xpraを実行する必要があります。

0
Panther