web-dev-qa-db-ja.com

agettyログインプログラムの引数

ここに最初の投稿。 CentOS 6マシンに対していくつかのテストを実行しようとしていますが、テストでネットワークが無効になるため、シリアルポートを介して通信します。

Bashルートシェルが含まれるようにttyS1をセットアップするupstartジョブを作成しました。私が使用した:

/sbin/agetty -n -l /bin/bash ttyS1 115200 vt102

これはハックであり、ログインプログラムとして/ bin/bashを実行します。動作しますが、--rcfile/bin/bashに渡したいです(そうしないと、rootとして実行されているにもかかわらず、「bash:/root/.bashrc:Permissiondenied」という望ましくない出力が表示されます。 )。

注:使用されているagettyのバージョンには、-versionも--login-optionsもありません。

2
crunk1

agettyは、-lオプションでプログラムが実行されることを期待しています。それを(たとえば)Perlスクリプトにし、thatにパラメーターを提供させることができます。たとえば、このスクリプトをmyshellと呼びます。

#!/usr/bin/Perl
exec 'bash --rcfile myprofile'

myshellコマンドでagettyのパス名を使用します。

bash(またはsh)プロファイルを読み取らないため、Perlを使用しました。 /bin/shを実行するスクリプトを使用すると、ユーザーの.profileを読み取ることができます(これはあなたの意図に反しているように見えました)。 exec機能は、他のスクリプト言語(shおよびbashを含む)で提供されます。

1
Thomas Dickey

やり過ぎだと思うかもしれませんが、gettyを使用してシリアル回線でシェルを実行するのではなく、 [〜#〜] slip [〜#〜] 、シリアル回線インターネットプロトコルを使用してみてください。これにより、シリアルポートがネットワークインターフェイスに変わり、sshなどを使用して複数のログインを同時に接続したり、rsyncを使用してファイルを送信したりできます。これらはすべて、信頼性とエラー検出の利点があります。

カーネルがそれをサポートしていると仮定すると、セットアップと使用は簡単です(通常はそうです)。最も簡単な方法は、slattachコマンドを使用することです。これは通常、net-toolsパッケージに含まれています。 1台のマシンでコマンドを実行します

Sudo slattach -p cslip -s 19200 /dev/ttyS0 &
Sudo ifconfig sl0 192.168.1.2 pointopoint 192.168.1.3

ここで、最初のコマンドはボーレートとシリアルデバイスを指定し、2番目のコマンドはそのマシンと他のマシンのIPアドレスを提供します。もう一方の端では、2つのIPアドレスを交換して、同じコマンドを実行します。まだ使用していないアドレスのセットを選択します。

0
meuh