[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