同じLANに2つのRaspberryPi(Raspbian 7と8を使用)を接続しています。 1つはAPCUPSとのデータ接続があります。両方のマシンに、停電状態で実行される類似のスクリプトがいくつかあります。 /etc/apcupsd/onbattery
と/etc/apcupsd/offbattery
(UPSに接続されたPiから)には、次のようなものがあります。
# [...]
# after the e-mail stuff
# this is for the remote machine
/usr/bin/ssh -f pi@piac-pal_wired "sh -c '/home/pi/bin/my_script.sh > /dev/null 2>&1'"
# this is for the local machine, connected to the UPS
/home/pi/bin/my_script.sh
ローカルスクリプトは機能しますが、リモートPi用のスクリプトは機能しません(エラー:「アクセスが拒否されました(パブリックキー)」。通常のユーザーとして実行すると機能します。また、Sudo
、シェルから。
したがって、問題は、rootユーザーがSSH経由で共有キー方式を使用して他のマシンに接続できないことであると理解しています。
Sudo ssh
コマンドを-vv
とともに実行すると、提供されたキーが/root/.ssh/id_rsa
のキーであることが示されます。対応する公開鍵はすでにリモートマシンのroot/.ssh/authorized_keys
に追加されており、その/etc/ssh/sshd_config
は次のように構成されています。
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password
上記の最後の2行を次のように変更した場合:
PasswordAuthentication yes
PermitRootLogin yes
uPSに接続されたPiのrootユーザーはリモートPiにログインできますが、コマンドはパスワードを要求します。これは、apcupsdスクリプトが無人で実行される場合には実行できません。
どんな提案でも大歓迎です。ありがとう。
編集:提案されたようにssh -vvv
でコマンド出力を追加します。関連する部分は最後だと思います:
debug3: load_hostkeys: loaded 1 keys
debug1: Host '$HOSTNAME' is known and matches the ECDSA Host key.
debug1: Found key in /root/.ssh/known_hosts:7
debug1: ssh_ecdsa_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: /root/.ssh/id_rsa (0x7f8c72a8)
debug2: key: /root/.ssh/id_dsa ((nil))
debug2: key: /root/.ssh/id_ecdsa ((nil))
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred gssapi-keyex,gssapi-with-mic,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: Offering RSA public key: /root/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug1: Trying private key: /root/.ssh/id_ecdsa
debug3: no such identity: /root/.ssh/id_ecdsa
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
問題は、sshコマンドがpi
ユーザーではなくroot
ユーザーを呼び出していたため、チェックされたauthorized_keys
は/home/pi/.ssh
のユーザーであり、 /root/.ssh
。私がする必要があるのは、クライアントのルートキーをサーバーの/home/pi/.ssh/authorized_keys
に追加することだけでした。それで全部です。