Control-p SSHセッションの固定

Control-p SSHセッションの固定

毎日使用しているSSH ARMマシンで奇妙な状況が発生しました。サーバーに接続してCtrl+を押してBASH機能をP呼び出すたびに、previous-historySSH接続は停止します。チルダSSHシーケンスを介してのみ終了できます。これの考えられる理由を調査しようとしています。

  1. previous-history上矢印を押してもうまく動作するので、これはBASHのバグではありません。

  2. Ctrl+P例外的な状況は適用されず、次のことが適用されますbind -p

    $ bind -p | grep previous-history
    "\C-p": previous-history
    "\eOA": previous-history
    "\e[A": previous-history
    
  3. Ctrl+をこのようなP他の機能にバインドすることは役に立ちません。 - Ctrl+はPまだSSHを停止します。

    $ bind '"\C-p":"\necho hi\n"'`
    
  4. CtrlBASHは+、++の元の文字を正しく印刷します。PCtrlV CtrlP^P

  5. $TERMに設定すると、screenBASH /etc/termcapreadlineはデフォルトで正しい値(Ctrl+L画面消去など)を使用します。$TERMxtermまたはlinuxに設定してもSSHは停止し続けますCtrlP

  6. 次の--noprofileようにBASHを起動してみましたが、+はまだ機能しません。--nobashrcCtrlP

  7. サーバーに接続していますが、-vvvログメッセージに奇妙な点が見つかりませんでした

  8. SSH接続が停止したら、問題なく他のサブシェルの同じサーバーに接続できます。これを実行した後、以前のサブシェルでハングしたセッションが再び正常になりました。入力した内容は表示できますが、セッションが停止している間に入力した内容はすべて表示されません。

  9. ローカルの問題を解決するために、複数のコンピュータがこのサーバーに接続しましたが、Ctrl+P動作しませんでした。

バッシュバージョン:

GNU bash、バージョン 4.1.5(1)-リリース(armv7l-unknown-linux-gnueabi)

SSHバージョン:

OpenSSH_5.3p1、OpenSSL 1.0.1c 2012年5月10日

Linuxカーネル:

2030年10月3日

この行動の理由が何であるかわかりません。私はCtrl+Pキーバインディングに精通しています。知っている人はいますか?

ベストアンサー1

SSHでデバッグするときに使用されます。

ssh -vvv remotehost

最大デバッグ出力を有効にする:リモート側に送信されるすべてのキー入力に対して、「debug3:NNNNの合計48バイトの履歴」を表示する必要があります。 Ctrl-Pが表示されない場合は、問題がリモートではなくローカル(クライアント)にあることを意味します。

リモート側でデーモンを制御する権限がありますか? sshdの-Dおよび-dオプション(-ddd最大デバッグ出力の場合も)を使用すると、問題を接続の半分に分離するのに役立ちます。

ローカル側に珍しいターミナルキーバインディングはありますか?stty -aまたは、stty -a | fgrep '^D'そこにバインディングがある場合は、Ctrl-Pを表示する必要があります。 (何を「停止」する必要がありますか?)

クライアントがクラッシュした後:

  1. このようなコマンドを実行すると、touch /tmp/fooサーバーに影響しますか? (つまり、停止を表示または実行します。)
  2. SSHクライアントエスケープを実行できますか?<enter>~? 「サポートされているエスケープシーケンス」のリストを入力して取得できますか?<enter>~.接続を入力して終了できますか?もしそうなら、すべての凍結は確かにサーバーにあります。

straceを使用すると、サーバー側で実行されている作業についてより良いアイデアを得ることができます。

strace -fo /tmp/strace.out sshd -ddd -D

おすすめ記事