[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:45756] suid したスクリプトからの scp ssh



柴田(あ)と申します。

より適当だと思われるところがありましたら
教えていただけるとありがたいです。



■やりたいこと
リモートサーバへデータを送りscp 、
リモートプログラムをキック ssh して、
データをもとに処理をさせようとしています。



■困っている問題
パスワードを聞かれてしまってスクリプトにしている
意味がありませんし、自動でさせたいです。



■質問
どのようにこの問題を回避して、スクリプトとして
希望通り動かすことが可能でしょうか?

何かヒント等をお願いできないでしょうか?
(書き換えをしている部分がありますので、
 おかしなところがありましたら、指摘お願いいたします。)



■希望
サーバ上のすべてのユーザ(たくさんいます)に下のことを
するスクリプトを実行させたい

1. データを作成する
2. 他のサーバに作成したデータを送る
   (内容は scp で送りたい)
3. 他のサーバに送ったデータをもとに
   同じサーバ上のスクリプトをキックしたい
   その対象サーバ上のスクリプトユーザは
   固定とします。



■現状とやってみたこと
0. とりあえずリモートサーバとローカルサーバに
   hoge というユーザを作りました。
   公開鍵認証をつかって su hoge した状態で
    ssh -l hoge REMOTE-SERVER として
   パスワードが無しでログインできるように
   してあります。
1. root 権限で実行は問題なく可能です。
      sudo STEP1.sh を実行してソコから
      キックされる STEP2.sh が実際の
      実行部で、こんな感じに書いてます。
      #!/bin/sh
      /usr/bin/sudo -u hoge /usr/bin/scp $FILE admin@$MSA:$DIR/
      /usr/bin/sudo -u hoge /usr/bin/ssh -l hoge REMOTE−SERVER sh /home/hoge/script/STEP3.sh
2. 一般ユーザから実行するには同じスクリプトだと
   /etc/sudoers に無いので当然実行できません。
   そこで、 suid したスクリプトで実行できるように
   したいと考えました。
   スクリプトはこんな感じです。
      sudo -u test STEP1.general.sh を実行して
      そこからキックされる STEP2.general.pl が
      実際の実行部でこんな感じに書いてます。
#!/usr/bin/perl
$ENV{PATH}="";
system('/usr/bin/scp $FILE admin@$MSA:$DIR/');
system('/usr/bin/ssh -l hoge REMOTE−SERVER sh /home/hoge/script/STEP3.sh');

      パーミッションはこんな感じです。
      suid するとうまくいきそうに思ったので設定してますが、
      やらなくて済むならやらなくてもいいです。
$ ls -l /usr/local/bin/registration/reguser2msa.wrapper
-rwsr-xr-x  1 root staff 553 2006-02-01 11:16 /usr/local/bin/STEP2.general.pl

      実行するとこういうメッセージでパスワードを
      要求されます。
Warning: Identity file /home/hoge/.ssh/id_rsa does not exist.
Password:←これを出ないようにしたい
(パスワードを知らないので入れられないしいれさせたくない)


●オプションに -vvv とつけていっぱい情報を表示させると
下の ★ をつけた行(上から 8 行目)の
debug1: identity file /home/test/.ssh/id_rsa type -1
のように test ユーザであることを見透かされて、ダメな
原因がそこにありそうです。

Executing: program /usr/bin/ssh host REMOTE-SERVER, user hoge, command scp -v -t $DIR/
OpenSSH_3.8.1p1 Debian-8.sarge.4, OpenSSL 0.9.7e 25 Oct 2004
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to REMOTE-SERVER [192.168.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/test/.ssh/identity type -1
debug1: identity file /home/test/.ssh/id_rsa type -1      ★
debug1: identity file /home/test/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_3.8.1p1 Debian-8.sarge.4
debug1: match: OpenSSH_3.8.1p1 Debian-8.sarge.4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_init: found hmac-md5
debug1: kex: server->client aes128-cbc hmac-md5 none
debug2: mac_init: found hmac-md5
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 131/256
debug2: bits set: 498/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug3: check_host_in_hostfile: filename /home/test/.ssh/known_hosts
debug3: check_host_in_hostfile: match line 1
debug3: check_host_in_hostfile: filename /home/test/.ssh/known_hosts
debug3: check_host_in_hostfile: match line 1
debug1: Host 'REMOTE-SERVER' is known and matches the RSA host key.
debug1: Found key in /home/test/.ssh/known_hosts:1
debug2: bits set: 540/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/test/.ssh/identity ((nil))
debug2: key: /home/test/.ssh/id_rsa ((nil))
debug2: key: /home/test/.ssh/id_dsa ((nil))
debug1: Authentications that can continue: publickey,password,keyboard-interactive,hostbased
debug3: start over, passed a different list publickey,password,keyboard-interactive,hostbased
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/test/.ssh/identity
debug3: no such identity: /home/test/.ssh/identity
debug1: Trying private key: /home/test/.ssh/id_rsa
debug3: no such identity: /home/test/.ssh/id_rsa
debug1: Trying private key: /home/test/.ssh/id_dsa
debug3: no such identity: /home/test/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug2: input_userauth_info_req
debug2: input_userauth_info_req: num_prompts 1
Password:



●そこで、キーのファイルを指定するために
system('/usr/bin/scp -v -i /home/hoge/.ssh/id_rsa $FILE hoge@REMOTE-HOST:$DIR/');
としてみたところ、★をつけた 3 行目のようなことになりました。
相変わらず 8 行目の★の行のように違うところを見ています。

Executing: program /usr/bin/ssh host REMOTE-SERVER, user hoge, command scp -v -t $DIR/
OpenSSH_3.8.1p1 Debian-8.sarge.4, OpenSSL 0.9.7e 25 Oct 2004
Warning: Identity file /home/hoge/.ssh/id_rsa does not exist.  ★
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to REMOTE-SERVER [192.168.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/test/.ssh/identity type -1
debug1: identity file /home/test/.ssh/id_rsa type -1  ★
debug1: identity file /home/test/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_3.8.1p1 Debian-8.sarge.4
debug1: match: OpenSSH_3.8.1p1 Debian-8.sarge.4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4
−途中略−
debug1: Authentications that can continue: publickey,password,keyboard-interactive,hostbased
debug1: Next authentication method: publickey
debug1: Trying private key: /home/test/.ssh/identity
debug1: Trying private key: /home/test/.ssh/id_rsa
debug1: Trying private key: /home/test/.ssh/id_dsa
debug1: Next authentication method: keyboard-interactive
Password:


●ということで、
system('/bin/cat /home/hoge/.ssh/id_rsa ');
を scp の前に入れてみましたが、ちゃんと読めます。
こんな感じ。
エラーがでる部分は触ってないので同じように出ます。

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCwtTVyM1BboOOP8Fi4QJyj1RpJP3DYuNGBqM4r1zP4/haorWt3
0JDsDVXFudlhDFPwwAP+IumK8jRFfGBcMxyoehActhtVi99M87EByss7Wl5msyam
−中略−
/rTKRDLLe9938BnKnQJBAImxstrq6NdLUp+ezGLrEV17czqdPH4b0QxmPVcoBPz1
eIUm4DaP0BpsgvmlDNTLY6JD6D7JIcq14IZB+GZ+gF0=
-----END RSA PRIVATE KEY-----
Executing: program /usr/bin/ssh host REMOTE-SERVER, user hoge, command scp -v -t $DIR/
OpenSSH_3.8.1p1 Debian-8.sarge.4, OpenSSL 0.9.7e 25 Oct 2004
Warning: Identity file /home/hoge/.ssh/id_rsa does not exist.
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to REMOTE-SERVER [192.168.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/test/.ssh/identity type -1
debug1: identity file /home/test/.ssh/id_rsa type -1
debug1: identity file /home/test/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_3.8.1p1 Debian-8.sarge.4
debug1: match: OpenSSH_3.8.1p1 Debian-8.sarge.4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
−以下略−



●他のオプションということで
 -o IdentityFile=/home/hoge/.ssh/id_rsa
としたら少し変わって、読めているようです。
ところが下のほうの★の行のようにまた文句いっている
みたいなんですが、
debug3: no such identity: /home/hoge/.ssh/id_rsa
どうしてこうなるのかがわかりません。

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCwtTVyM1BboOOP8Fi4QJyj1RpJP3DYuNGBqM4r1zP4/haorWt3
0JDsDVXFudlhDFPwwAP+IumK8jRFfGBcMxyoehActhtVi99M87EByss7Wl5msyam
−中略−
/rTKRDLLe9938BnKnQJBAImxstrq6NdLUp+ezGLrEV17czqdPH4b0QxmPVcoBPz1
eIUm4DaP0BpsgvmlDNTLY6JD6D7JIcq14IZB+GZ+gF0=
-----END RSA PRIVATE KEY-----
Executing: program /usr/bin/ssh host REMOTE-SERVER, user hoge, command scp -v -t $DIR/
OpenSSH_3.8.1p1 Debian-8.sarge.4, OpenSSL 0.9.7e 25 Oct 2004
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to REMOTE-SERVER [192.168.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/hoge/.ssh/id_rsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_3.8.1p1 Debian-8.sarge.4
debug1: match: OpenSSH_3.8.1p1 Debian-8.sarge.4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@xxxxxxxxxxxxxx,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@xxxxxxxxxxx,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit: none,zlib
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_init: found hmac-md5
debug1: kex: server->client aes128-cbc hmac-md5 none
debug2: mac_init: found hmac-md5
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 131/256
debug2: bits set: 529/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug3: check_host_in_hostfile: filename /home/test/.ssh/known_hosts
debug3: check_host_in_hostfile: match line 1
debug3: check_host_in_hostfile: filename /home/test/.ssh/known_hosts
debug3: check_host_in_hostfile: match line 1
debug1: Host 'REMOTE-SERVER' is known and matches the RSA host key.
debug1: Found key in /home/test/.ssh/known_hosts:1
debug2: bits set: 511/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/hoge/.ssh/id_rsa ((nil))
debug1: Authentications that can continue: publickey,password,keyboard-interactive,hostbased
debug3: start over, passed a different list publickey,password,keyboard-interactive,hostbased
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/hoge/.ssh/id_rsa
debug3: no such identity: /home/hoge/.ssh/id_rsa    ★
debug2: we did not send a packet, disable method
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug2: input_userauth_info_req
debug2: input_userauth_info_req: num_prompts 1
Password:


-- 
SHIBATA Akira      ケーブルテレビはまちづくり
shibata@xxxxxxxxxxxxxx   phone : +81-429-74-3611