network/if-up.d/script で SSH 鍵認証が機能しません。

network/if-up.d/script で SSH 鍵認証が機能しません。

network/if-upSSHキーにアクセスする必要がある2つのほぼ同じスクリプトがあります。 SSH秘密鍵には600の権限がありますが、私のスクリプトはどのようにこの鍵にアクセスしますか?

私は、これらのスクリプトが実行する操作のために設定したユーザーアカウントに関連付けられているSSHキーを維持することを好みます。

スクリプトを実行しているユーザーを見つける方法がわからず、私のスクリプトでそのユーザーを試しnetwork/if-upたことはありません。su -l -c "my_command" mytaskuser私は単純な間違いを犯したことを願っています。

Ubuntuでは、私のスクリプトは/etc/network/if-up.d他のディストリビューション(openSuseなど)にありますetc/sysconfig/network/if-up.d

私のスクリプトはすべて次のようになります(質問に焦点を当てるために1つの例のみを使用します)。

#!/bin/sh
LOGDATE="_`date +%Y-%m-%d_%H%M`"
scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log  [email protected]:somelog${LOGDATE}.log
exit 0

mytaskuserとしてログインしてスクリプトを手動で実行すると、スクリプトは完全に正常に動作します。フォローするときif-up.d/

私は次のようなバリエーションを試しました。

#!/bin/sh
LOGDATE="_`date +%Y-%m-%d_%H%M`"
su -l -c "scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log  [email protected]:somelog${LOGDATE}.log" mytaskuser
exit 0

それは無駄です。このスクリプトが機能する唯一の方法は、SSHキー(id_rsa)を所有しているユーザーとして実行することです。

ベストアンサー1

ルートとして実行すると、scpこのディレクトリを含むルートのホームディレクトリでファイルを見つけますknown_hosts。サーバーの公開鍵が存在しない場合、~/.ssh/known_hostssshはユーザーに鍵を追加するように求めます。ユーザーにメッセージを表示する端末がない場合、ssh はホストが正しいことを確認できないため、接続を拒否します。

scp自分のユーザーとして()を実行する必要がありますmytaskuser

su -c "scp -i ~/.ssh/id_rsa ~/some.log  [email protected]:somelog${LOGDATE}.log" mytaskuser

-lオプションを次に渡さないでくださいsu。ログインシェルを実行するには、渡されたコマンドは無視されます-c

おすすめ記事