network/if-up
SSHキーにアクセスする必要がある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_hosts
sshはユーザーに鍵を追加するように求めます。ユーザーにメッセージを表示する端末がない場合、ssh はホストが正しいことを確認できないため、接続を拒否します。
scp
自分のユーザーとして()を実行する必要がありますmytaskuser
。
su -c "scp -i ~/.ssh/id_rsa ~/some.log [email protected]:somelog${LOGDATE}.log" mytaskuser
-l
オプションを次に渡さないでくださいsu
。ログインシェルを実行するには、渡されたコマンドは無視されます-c
。