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

SSH 経由で接続しているときに、ホストのキーボードから入力を読み取るにはどうすればよいですか?

このハッキングされたスクリプトは、今のところうまくいきます:

import string

from evdev import InputDevice
from select import select

keys = "X^1234567890XXXXqwertzuiopXXXXasdfghjklXXXXXyxcvbnmXXXXXXXXXXXXXXXXXXXXXXX"
dev = InputDevice('/dev/input/by-id/usb-HID_OMNIKEY_5127_CK_01010053423438303000835748112531-event-kbd')

while True:
   r,w,x = select([dev], [], [])
   for event in dev.read():
        if event.type==1 and event.value==1:
                print( keys[ event.code ] )

python-evdev を使用して /dev/input/foo から読み取ります そして、それらを読み取り可能な値に非常に汚い方法で変換します。

スクリプトを実行してカードをリーダーに接続すると、次のようになります。

[email protected] ~ $ python test.py
7
6
4
3
f
a
4
6

必要な権限があると仮定して、次の起動まで簡単に動作させるための簡単なハックを次に示します。

次のコマンドを使用すると、コンピューターで実行されているすべてのプロセスが表示されます

ps -ef

キーボードが現在読み取られているところから login/getty プロセスの PID を見つけるために、grep を介してこの関数の結果を渡すことができます。

ps -ef | grep tty

次のようなものを見ることができます

root     23698     1  0 18:17 ttyO0    00:00:00 /sbin/getty -L ttyO0 115200 vt102

2 番目の列の数字に注意してください。これが PID です。そして 6 列目は、キーボードがある場所です。

そのプロセスを停止するには、次のコマンドを使用します (PID を数値に置き換えます)

kill -stop 23698

これで、キーボードのキーが来る場所から tty を読み取ることができます (tty は ps コマンドで表示されます)。

cat /dev/ttyO0

cat 永久に読み取り、キーボードで入力されたものを何でも出力します。

完了し、通常の動作に戻りたい場合は、

でキーボード機能を再開できます。
kill -cont 23698

もちろん、それは一般的なアイデアの概要です。独自のプログラムを使用して tty から読み取ることができます。


最近ハッカソンのためにこれをしなければならなかったので、私たちが最終的に行ったことに貢献することにしました.

<オール>
  • tty1 (キーボードデバイスが入力をダンプするメイン端末) で root として自動ログインをセットアップします。 Arch Linux wiki エントリには適切な手順があります。再起動してログインしてください。

  • 「ttyEcho」として知られる小さなプログラムのソースをコピーします。 1 つのコピーはここにありますが、Google で検索するとさらに多くの情報が表示されます。このプログラムを使用すると、コマンドを別の端末にエコーできます。ターゲット マシンでコンパイルします。

  • /dev/tty1 でなんでも実行できるようになったので、あとは ./ttyEcho -n /dev/tty1 'cat > buffer' だけです。 tty1 のすべての入力をファイルに追加します。常に拡張するファイルを作成する代わりに、mkfifo buffer を使用します 最初に、単なる名前付きパイプである特別なファイルを生成します。これは、メモリのみによってサポートされる FIFO キューです。

  • SSH セッションから tail -f filename できるようになりました tty1 でのすべてのキーボード入力を監視します。 Python 内から open('filename','r') .read() を呼び出し続けます または .readline() 入ってくるキーボード データのフィードを取得します。

  • この方法は、キーボード スキャンコードの解析を回避し、コードなしでデータの適切な大きなバッファーを保持するため、私たちにとって素晴らしいものでした。


    Linux
    1. ubuntuでnasm(アセンブリ)を使用してキーボードから1文字の入力を読み取るにはどうすればよいですか?

    2. コマンドラインでSVNにSSHパスワードを提供するにはどうすればよいですか?

    3. 既知のホストに対する SSH のホスト検証を回避するにはどうすればよいですか?

    1. リモート コマンドの出力をローカル クリップボードにコピーするにはどうすればよいですか?

    2. コンソールで入力キーボード レイアウトを変更するにはどうすればよいですか?

    3. Linux コマンドラインからフォルダーをコピーするにはどうすればよいですか?

    1. シェルから現在の CPU 使用率を確認するにはどうすればよいですか?

    2. CからLinuxでPIDによってプロセスのCPU使用率を計算する方法は?

    3. Linux カーネルからメモリのブロックを予約するにはどうすればよいですか?