私の問題の名前を正確に指定する方法がわかりません。
私のニーズに合ったTUIプログラムセットを含むサーバーがあるというシナリオです。
ネットワーク上の他のユーザーがraspiや恐竜コンピュータなどの小さなものを開くことを望み、起動すると、ユーザーは通常はローカルログインのgettyを見ることができませんが、代わりにサーバーにsshを表示します。サーバーが応答しない場合にのみ、ローカルログイン情報がユーザーに提供されます。
この種のシナリオは、新しくもラジカルではないようです...私の考えでは、基本的にSSHを介してtcp / ipに接続されたシンクライアントの概念です。
ベストアンサー1
実際に可能です。私は1998年頃に大学で同様のことをしました。
デフォルトでは、標準プログラムではなくカスタムgetty
バージョンのプログラムを呼び出すようにRasPiのプロセスを設定する必要があります。login
/bin/login
login
特にセキュリティを必要としない場合、またはプロトタイプのみを作成する場合、カスタム代替エントリはスクリプトです。しかし、深刻な実装のためには安全のためにコンパイルされたプログラムでなければならないと思います。スクリプトインタプリタを削除すると、実行するコードの量が最小限に抑えられ、競合状態やその他の攻撃を設定するのが難しくなります。
ただし、あなたのデザインにはユーザーエクスペリエンスの問題があるかもしれません。ユーザーがすでにログイン名を入力している場合は、パスワードのプロンプトが表示されるとすぐに、ほとんど何もしなくても、ほとんど反射動作でパスワードを直接入力できます。 SSH接続の試行が失敗し、同じログインが自動的にローカルログイン試行に再利用される場合、ユーザーは自分がサーバーに接続されていると考えてローカルログインを使用していることを発見した場合、混乱する可能性があります。
getty
好ましくは、ローカルログイン用に変更されていない構成を使用して2番目の仮想コンソールに切り替えるなど、より慎重なアクションが必要です。ログインプロンプトの前に表示する/etc/issue
ために必要なキーストロークの手順を追加できます。getty
副作用として、カスタムlogin
スクリプトまたはバイナリは基本的に次のように大幅に簡略化できます。
#!/bin/sh
REMOTEUSER="$1"
exec ssh -oEscapeChar=none "$REMOTEUSER"@your.server.example
この-oEscapeChar=none
オプションはOpenSSHを使用してキーストロークがエスケープされるのを防ぎ、ユーザーはSSHクライアントを使用してポートフォワーディングを設定したり他の空腹を実行したりすることはできません。
(またはその代替項目の1つでも)rootとして実行されるため、このコマンドを実行する前に、rootではなく一部のユーザーに切り替えることをお勧めしますlogin
。ここでは、コンパイルされたプログラムがより柔軟になります。exec()
ssh
いくつかのプログラミング経験がある場合は、/bin/login
選択したLinuxディストリビューション用のソースコードパッケージをダウンロードしてハックできることを確認することをお勧めします。
getty
基本的には2つの変更が必要です。指定されたユーザー名をパラメーターとして使用してログインするユーザー名を選択する代わりに、交換ユーザーが発信SSH接続用に予約されているハードコーディングされたユーザー名を使用できるようにすることもできます。login
。exec()
ログインプロセスの終わりにユーザーのシェルを使用する代わりに、SSHコマンドを使用してパラメータとしてexec()
取得したユーザー名とサーバー名をgetty
指定します。