0

libsshを使用してリモート マシンに接続し、コマンドを実行しています。

接続は正常に機能しますが、問題は次のとおりです。離れたマシンでは、接続中に実行されている bash は rbash です。送信ps | grep ungreppable_phraseして他のマシンで実行すると、出力は次のようになります。

root 25989 25987 0 07:47 ? 00:00:00 rbash -c ps -ef | grep ungreppable_phrase

(そのリストからgrepコマンドを削除しました)

したがって、明らかにrbash、リモート シェルです。

現在、rbash の man ページには、rbash の制限が適用される前に起動ファイルが読み込まれることが示されています。したがって、起動ファイル (/etc/profile、~/.bash_profile、~/.bash_user または ~/.profile) のいずれかに の定義が含まれているPATH場合、コマンドを実行するとその定義が表示されるはずです。特に、 のディレクトリの 1 つにいくつかの実行可能ファイルがあれば、PATHそれを実行できるはずです。

私の .profile ファイルからの行は次のとおりです。

PATH=/home/my_user/bin

どうにか、そこに入ることができましlsた。実行可能ファイルが含まれています。

私の ~/.profile は最後にソースされるファイルであり、別のファイルのソースは含まれていません。の再定義もありませんPATH

しかし、「コマンドが見つかりません」というエラーが表示されます (または、echo $? は 127 を返します)。

リモートでログインしたときに .profile ファイルが提供されていないように見える理由を誰か教えてもらえますか? libssh のコードが原因ですか? 上記のgrepでは表示できないrbashに渡される特別なオプションがあるかどうかを調べるために、それを調べようとしています..

(rbash モードなので、単純に PATH の変更を要求することはできません)

どうもありがとう、パスカル

4

2 に答える 2

1

ああ、私はついに何が間違っていたのかを発見しました。

調査の結果、ssh {username}@{host}(libssh API を介して)マシンにログインしたときにwhoami応答しないように見えusernameましたが、代わりに、応答しましたroot(はい、ルート。0:0、オールマイト、およびすべて。スーパーユーザー)。 .

/etc/passwd ファイルを確認したところ、最も驚いたことに、username にも 0:0 userid がありました。

私の環境ではルートソースはbashです({username}はrbashを使用します)。したがって、上記の問題が見つかりました。

ここで、「name1」と「name2」がエイリアスであり、ssh name2@hostlibssh を介して実行しているときに、なぜ ssh が「name1」に切り替わるのかは不明のままです。しかし、少なくとも、上記の接続が機能しない理由はわかっています。

于 2013-06-11T15:18:56.120 に答える
0

リンクしたmanページは、これが通常のbashであることを示しており、その後制限されます。では、あなたの bash はどのように始まっていますか? どのように bash が起動するかによって、どのファイルを読み取るかがわかります。また、検索時にファイル~/.profileがない場合にのみ使用することにも注意してください。~/.bash_profilebash が対話型ログイン シェルとして実行されている場合にのみ、これらのファイルが検索されます。

~/.bashrcページのさらに下に、 ssh によって開始されたシェルの読み取り場所が表示されます。要約すると、最も可能性の高い説明は、ファイルがない場合、~/.bashrcまたは~/.profile.

于 2013-06-11T13:32:41.390 に答える