SSHデータ転送を監視し、データが流れていない場合は接続を閉じます。

SSHデータ転送を監視し、データが流れていない場合は接続を閉じます。

ファイル転送と手動保存のための単純なRHELサーバーがあり、他のすべてのLinuxクライアントはSSH経由で接続されています。

クライアントがデータにアクセス/保存しようとするたびにサーバーに接続し、nautilusデータ転送が停止しても手動で削除するか、クライアントがシステムをシャットダウンするまで接続は維持されます。

サーバーでCPU使用率を監視すると、ほとんどのCPU使用率はこれらの確立された接続によって引き起こされます。

[root@server]# top

top - 11:22:13 up  2:36,  6 users,  load average: 2.79, 2.19, 1.90

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
17247 share     20   0 55640 1924  972 S 26.7  0.1   7:36.72 sftp-server                                                                                                                                                                     
17900 share     20   0 55640 1932  972 S 17.5  0.1  10:16.45 sftp-server                                                                                                                                                                     
26152 share     20   0 55596 1872  972 S 17.5  0.1   8:12.04 sftp-server                                                                                                                                                                     
17487 share     20   0 55636 1864  972 R 15.5  0.1   9:58.56 sftp-server                                                                                                                                                                     
 2852 root      20   0  195m  55m 7872 R 13.8  2.7  17:01.72 X                                                                                                                                                                               
11768 share     20   0 55560 1684  832 S  8.9  0.1   3:12.00 sftp-server                                                                                                                                                                     
17486 share     20   0 98172 1884  784 R  8.2  0.1   4:48.35 sshd                                                                                                                                                                            
26151 share     20   0 98236 1872  784 S  7.9  0.1   4:03.29 sshd                                                                                                                                                                            
17899 share     20   0 98204 1916  784 S  7.2  0.1   5:00.17 sshd                                                                                                                                                                            
12569 tejas     20   0  322m  11m 7808 S  5.9  0.6   0:28.12 gnome-system-mo                                                                                                                                                                 
17246 share     20   0 98204 1840  784 S  5.9  0.1   3:33.18 sshd                                                                                                                                                                            
11767 share     20   0 98008 1716  772 S  4.3  0.1   1:28.73 sshd                                                                                                                                                                            
15168 tejas     20   0  989m  64m  18m S  0.7  3.2   0:01.31 chrome                                                                                                                                                                          
 4077 tejas     20   0  109m 9312 5584 S  0.3  0.5  24:26.08 App                                                                                                                                                                             
11360 tejas     20   0  304m  10m 5144 S  0.3  0.5   0:05.23 gnome-terminal                                                                                                                                                                  
14236 root      20   0 15168 1380  928 R  0.3  0.1   0:00.36 top                                                                                                                                                                             
    1 root      20   0 19324 1056  844 S  0.0  0.1   0:00.67 init                                                                                                                                                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                                                        

そのため、SSH接続をオフロードする自動化された方法(データが流れない場合は約10分)、またはCPU使用率を最小限に抑えるための別のアイデアを探しています。
編集する:slmのコメントによると、can you explain how they're connecting from Nautilus?
これはクライアントが通常SSHを介してサーバーに接続する方法です。

  • 必須フィールドを入力してパスワードを入力してください。

ここに画像の説明を入力してください。

ここに画像の説明を入力してください。

  • ファイルを転送/生成します。

ここに画像の説明を入力してください。

  • ディレクトリを閉じてから30分間待ちます。
  • まだ接続が表示されています...

ここに画像の説明を入力してください。

答え1

方法 #1 - SSHD/SFTPD によるタイムアウトの使用

SSH経由で接続している場合は、SSHD側の設定ファイルでこれらの設定を設定できます/etc/ssh/sshd_config

ClientAliveInterval 30
ClientAliveCountMax 5

これらの設定が適用される場所は次のとおりです。

  • ClientAliveInterval:クライアントからデータが受信されない場合、sshdは暗号化されたチャネルを介してメッセージを送信し、クライアントから応答を要求するタイムアウト間隔を秒(30)に設定します。デフォルト値は 0 です。これは、これらのメッセージがクライアントに送信されないことを意味します。このオプションはプロトコルバージョン2でのみ利用可能です。

  • ClientAliveCountMax:sshdがクライアントから返されたメッセージを受信せずに送信できるクライアントアクティブメッセージの数(5)を設定します。クライアントアクティビティメッセージの送信中にこのしきい値に達すると、sshdはクライアントの接続を切断してセッションを終了します。

10分を得るには、それに応じて時間を調整する必要があります。たとえば、次のようになります。

ClientAliveInterval 120
ClientAliveCountMax 5

方法#2 - ナイフを使用する

上記の方法がうまくいかない場合は、クライアントが接続の維持を活用して、トラフィックの少ない接続を人為的にサポートしている可能性があります。このような場合、アイドル接続を解除するにはどうすればよいですか?

1つのアプローチは、特定の期間(シナリオで10分など)の間アイドル状態の接続を監視するcronjobを開発することです。

cutterこのスクリプトがこれらの接続の1つを検出すると、クライアントの意志に反してクライアントに接続を切断するように指示するなどのコマンドを使用できます。

$ cutter <ip> <port>

はい

$ cutter 192.168.1.20 22

メモ:Cutterは、ほとんどの主要なディストリビューションのリポジトリに配置する必要があります。 Fedora/CentOS/RHELはもちろん、Debian/Ubuntuにもこの方法でインストールできました。

デバッグ接続

@Gillesは、アイドル接続が実際にCPU負荷を引き起こすべきではないというQの下のコメントで良い指摘をしました。これらすべてのsftp-serverプロセスが私が考えるかなりの負荷(20〜30%)を引き起こしているという事実はtop何かが進んでいることを示しているようです。

straceまず、いずれかのプロセスを使用して接続してsftp-server目的を確認します。たとえば、PID 17247に接続する場合:

$ sudo strace -p 17247

実際に何かをしていることを確認してください。本当にこれはできません。tcpdumpまたは、wiresharkNautilusからの着信および発信ネットワークトラフィックを監視するために使用することもできますsftp-server

引用する

関連情報