UNIXユーザーの変更をCシェルから行う方法をお願いします。「#!/usr/bin/csh 改行su - usrid 改行userpass」でこのシェルを実行すると「Password:」というプロンプトがでて止まってしまいます。よい方法をお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答9件)

id:kouun No.1

回答回数2ベストアンサー獲得回数0

ポイント10pt

http://www.hatena.ne.jp/kouun

kouunさんのプロフィール - はてな

su (新ユーザID)リターン

Password:リターン

whoami

新ユーザID

と表示されれば変更されていることになるのでは?

id:smileless

だめです。できません。

2003/10/31 21:52:45
id:inokuni No.2

回答回数1343ベストアンサー獲得回数21

ポイント10pt

例えばログイン名 hatena にユーザ変更する場合、

su - hatena<リターン>

[hatena のパスワード]<リターン>

とすればできると思いますが?

hatena のパスワードが正確でないとエラーになります。

id:smileless

コマンドでやればできます。

でもシェルからやるとパスワードを聞くプロンプトがでてそこで止まるんです。

シェルの中でプロンプトがきたらパスワードを発行するという方法をとらないとだめだと思います。

2003/10/31 23:41:01
id:desutai No.3

回答回数15ベストアンサー獲得回数0

ポイント10pt

suコマンドの解説です。

cshのシェルスクリプトからsuコマンドでユーザー変更したいという事だと思いますが、rootユーザーでない限りPasswordは聞かれてしまいます。

http://linux.ascii24.com/linux/linuxcom/2000/07/31/512928-000.ht...

ASCII.jp:ascii24.com一時停止のお知らせ

このような場合sudoコマンドを使い、/etc/sudoersファイルにNOPASSWD指定する事により パスワード無しにユーザー変更しコマンドの実行が可能になります。

id:smileless

スーパーユーザーではないので2番目のやり方はちょっと・・・

パスワード無しにユーザー変更するのではなく、パスワードを入力するプロセスを正常に行うことができるシェルの作成をしたいのです。

2003/10/31 23:42:49
id:kazuHiro No.4

回答回数15ベストアンサー獲得回数0

http://www.atmarkit.co.jp/flinux/rensai/shell01/whatsshell.html

2つの顔を持つソフトウェア:シェル

答えではないのでポイント要りません。

シェルとシェルスクリプトが混同されているようです。

id:smileless

su.cshをつくり、これを実行します。

このシェルの中身でユーザーを変更したいのです。

2003/11/01 02:34:10
id:goldman No.5

回答回数86ベストアンサー獲得回数0

ポイント18pt

http://www.hatena.ne.jp/1067598690#

UNIXユーザーの変更をCシェルから行う方法をお願いします。「#!/usr/bin/csh 改行su - usrid 改行userpass」でこのシェルを実行すると「Password:」というプロンプトがでて.. - 人力検索はてな

su コマンドのパスワード入力コマンドはコンソール入力なので、シェルスクリプトではできないと思います。でもひょっとして以下のシェルスクリプトでできるかもしれません。(やったことないけど・・・)

#!/usr/bin/csh

echo パスワード > psw.tmp

su - usrid  < psw.tmp

rm psw.tmp

id:smileless

ありがとうございます

。やっぱりだめみたいです。

2003/11/01 20:45:38
id:s-mroi No.6

回答回数23ベストアンサー獲得回数0

ポイント18pt

URLはダミーです。

手元に環境が無いので試せてはいないのですが、

(echo userpass) | su - userid

でどうでしょうか。これでだめなら

(sleep 1;echo userpass) | su - userid

ならどうでしょう。

昔、シェルスクリプト内でtelnetコマンドを実行し、そのtelnetにパスワードを送り込むテストをした時はこんな感じで出来ていました。

出来なければポイントは結構です。

id:smileless

うーん、だめみたいですね。

ありがとうございました。

2003/11/01 20:47:58
id:s-mroi No.7

回答回数23ベストアンサー獲得回数0

ポイント18pt

二回目です。

「ここではsuコマンドで他のユーザになり、 そのユーザで何か処理を行って、またもとのユーザに戻る、という処理を Expectで自動化してみます。」

というサンプルがあります。「もとのユーザに戻る」処理を省略すれば行けそうな気がします。

id:smileless

ありがとうございます。動きはTERA TERMのマクロと同じようですね。でも、こういったツールをインストールできない環境にあるのです。

2003/11/04 12:18:56
id:dasm No.8

回答回数66ベストアンサー獲得回数0

ポイント18pt

http://www.math.kobe-u.ac.jp/~kodama/tips-expect.html

expect. 対話的なコマンド(telnet,ftp,su等)を自動実行したいとき(Kodama's tips page)

expect を使えば解決できます。

#!/usr/local/bin/expect

spawn su - USERNAME

expect {Password:}

send [lindex $argv 0]¥r

# 別ユーザでのコマンドの実行例:

expect {*>}

send ”echo ¥$USER¥r”

# と、このような感じで expect と send の文を繰り返す

expect {*>}

send exit¥r

というようなスクリプトを書いて呼び出してやればいいはずです。このスクリプトをexpect.sh として、パスワードの書かれたファイルを passwd とすれば、

./expect.sh < `cat passwd`

といった具合にです。

実際、手元の環境ではこれでうまくいきました。

http://expect.nist.gov/

Expect - Expect - Home Page

expect が入ってない場合は、ここから恐らくダウンロードできるかと思います。

それから、上のリンクを辿るとわかるように、csh はよほどの事がない限りは使わない方が無難です。

id:naguro No.9

回答回数36ベストアンサー獲得回数1

ポイント18pt

smilelessさまがどのような意図で、シェルスクリプト内でsuをしたいのかは存じませんが、それは、本質的には、UNIXのコンセプトと反するため、あまりお勧めはしないです。

その気になれば、プロンプト表示を検知したら文字列を流し込むという事も出来ますが。

ただ、その方法は、rootのパスワードを見れる状況に置く事になるので、あまりお勧めはしません。

そのかわり、sudo等を使うのが、本来的だと思いますよ。

尚、半分営業になってしまうのですが、別の質問に出ておりました、OLAPツールの類は私の分野です。 もしよろしければ、行いたい事などをメールしていただければ、それに基づいてのお勧めが出来そうです。

⇒ naguro@mc.neweb.ne.jp

id:smileless

ありがとうございました。

OLAPツールの方はとりあえずどれくらいの種類があるのかとその性能の概要を比較検討するための質問でしたので、もう少ししてからご連絡させていただくかもしれません。

そのときはよろしくお願いいたします。

2003/11/05 09:16:44

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません