GNU/Linux >> Linux の 問題 >  >> Linux

実行中のプロセスを強制終了せずに ssh セッションを切り離すには?

使う

Ctrl-Z

アプリケーションを一時停止し、コマンド ラインに戻ります。次に使用

bg

プロセスをバックグラウンドで続行できるようにします。最後に使用

disown

セッションを切断して端末を閉じたときにプロセスが閉じられないようにします。

プロセスは引き続き実行されますが、ターミナルに「再接続」して、新しいセッションに再接続した場合に私が認識している出力を表示する方法はありません.


reptyr を使用

これはまさに man 1 reptyr の場合です 明示的に言及:

<ブロック引用>

reptyr 既存の実行中のプログラムを取得し、それを新しい端末に接続するためのユーティリティです。 ssh を介して実行時間の長いプロセスを開始しましたが、終了する必要があり、中断したくありませんか? screen を開始するだけです 、 reptyr を使用 それを取得するには、ssh セッションを強制終了して、ホームに向かいます。

(マニュアルには screen が記載されています 、 tmux を使用できます 代わりに、お好きな方を選んでください)。

このメモをお見逃しなく:

<ブロック引用>

reptyr ptrace(2) に依存 リモートプログラムにアタッチするためのシステムコール。 Ubuntu Maverick 以降では、セキュリティ上の理由から、この機能はデフォルトで無効になっています。することで一時的に有効にすることができます

echo 0 > /proc/sys/kernel/yama/ptrace_scope

root として、またはファイル /etc/sysctl.d/10-ptrace.conf を編集して永続的に には、この設定に関する詳細情報も含まれています。

ファイルが存在しないが /etc/sysctl.d/ の場合 ディレクトリにある場合は、おそらく次の内容で作成するだけで十分です:

kernel.yama.ptrace_scope = 0

設定は次回の再起動時に適用されます。以下のセキュリティに関する考慮事項を参照してください。

基本的な使い方

基本的な使い方は簡単です:

reptyr PID

どこで PID 新しい端末にアタッチするプロセスの PID です。 reptyr に注意してください プロセスを別の端末に接続するだけです。これは、プロセスが新しいシェルの子になるという意味ではありません。

セキュリティに関する考慮事項

設定 ptrace_scope 0 として 推奨されません。

<ブロック引用>

Linux の人気が高まるにつれ、マルウェアの大きな標的になるでしょう。 Linux プロセス インターフェイスの特に厄介な弱点の 1 つは、1 人のユーザーが任意のプロセスのメモリと実行状態を調べることができることです。たとえば、1 つのアプリケーション (Pidgin など) が侵害された場合、攻撃者は実行中の他のプロセス (Firefox、SSH セッション、GPG エージェントなど) にアタッチして、追加の資格情報を抽出し、その範囲を拡大し続けることができます。ユーザー支援のフィッシングに頼らずに攻撃できます。

これは理論上の問題ではありません。 SSH セッション ハイジャック (http://www.storm.net.nz/projects/7) および任意のコード インジェクション (http://c-skills.blogspot.com/2007/05/injectso.html) 攻撃は既に存在し、残っています。 ptrace なら可能 以前のように動作することが許可されています。 ptrace以降 開発者や管理者以外は一般的に使用しないため、システム ビルダーには、このデバッグ システムを無効にするオプションを許可する必要があります。

[…]

sysctl 設定 (CAP_SYS_PTRACE でのみ書き込み可能) ) は:

0 - クラシック ptrace 許可:プロセスは PTRACE_ATTACH できます ダンプ可能である限り、同じ uid で実行されている他のプロセスに […]

1 - 制限付き ptrace :プロセスは、PTRACE_ATTACH を呼び出したい下位プロセスと事前定義された関係を持っている必要があります。 の上。デフォルトでは、上記の従来の基準も満たされている場合、この関係はその子孫のみの関係です。 […]

2 - admin-only attach:CAP_SYS_PTRACE のプロセスのみ ptrace を使用できます PTRACE_ATTACH で 、または PTRACE_TRACEME を呼び出す子を通じて .

3 - アタッチなし:プロセスは ptrace を使用できません PTRACE_ATTACHPTRACE_TRACEME 経由でもありません .一度設定すると、この sysctl 値は変更できません。

合理的なアプローチは、ptrace_scope を設定することです 2reptyr を許可する ptrace を使用するには :

echo 2 | sudo tee /proc/sys/kernel/yama/ptrace_scope
sudo setcap CAP_SYS_PTRACE+pe /usr/bin/reptyr

永続的な設定を保持するファイルを忘れないでください。

機能はファイルの inode に保存されます。したがって、reptyr であっても驚かないでしょう。 更新されると機能が失われます (新しい実行可能ファイルに原子的に置き換えられます)。


コマンドの関連付けを完全に解除できます (bash で) または zsh 、おそらく他のシェル) disown 指図。ただし、tty が必要な場合、コマンドはこれに満足しない可能性があります。その場合は、reptyr を参照してください。 答えてください。

$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+  Stopped                 sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$ 

もう 1 つのオプションは、screen (または tmux) セッションを自動的に開始することです。これにより、そのように設定したために既に開始されているため、開始するのを忘れることはありません。その方法については、別の場所に投稿があります。


Linux
  1. Linuxで応答しないSSH接続を終了する方法は?

  2. Ssh –実行中のプロセスを破棄して新しいスクリーンシェルに関連付ける方法は?

  3. 別のBashセッションで実行中のプロセスの出力を表示する方法は?

  1. Linuxで実行中のプロセスを再起動(またはリセット)する方法は?

  2. Screen を別の SSH セッションから強制的に切り離すにはどうすればよいですか?

  3. ドロップされた SSH セッションで実行中のコマンドを再開する

  1. パスワードなしでSSHログインを設定する方法

  2. Ssh – Sshセッションが切断された後もプロセスを実行し続けますか?

  3. Linux コンソールと ssh セッションで実行されているかどうかを確認する方法は?