2

ローカルサーバーにスクリプト(test.sh)があり、ターミナルで実行すると正常に動作します。スクリプトはディレクトリを削除し、ローカルディレクトリを再作成します。次に、「ssh -i $ private_key ..」を使用してリモートサーバーに接続し、そこにファイルをコピーします。

このスクリプトをjenkinsで実行すると

sh test.sh

それは動作しません。次のエラーが発生します。

rm: .. Permission denied
mkdir: .. Permission denied
Warning: Identity file /.ssh/private_key not accessible: Permission denied.

Jenkinsはスクリプトと同じサーバー上にあります。

Jenkinsは別のユーザーであり、rootとして実行していることをすべて実行することはできません。すべてのセキュリティを失うことなくアクセス許可を設定するにはどうすればよいですか。特にprivate_keyの場合、アクセス許可をeasyに設定するのはばかげています-現在600(所有者の読み取りおよび書き込みアクセス許可)に設定されており、所有者はrootです。

4

1 に答える 1

1

秘密鍵のアクセス許可を600に設定することの全体的なポイントは、他のユーザーが秘密鍵にアクセスできないようにすることです。キーを別のユーザーのホームディレクトリ(/home/anotheruser/.ssh)に配置した場合、Jenkinsユーザーも他のユーザー(rootを除く)もアクセスできなくなります。これは設計どおりです。

Jenkinsユーザーが秘密鍵を使用できるようにする場合は、それをjenkinsユーザーのホームディレクトリ(/home//.ssh)にもコピーします。

また、権限を提供せずにJenkinsユーザーとして他のユーザーのディレクトリにディレクトリを削除/作成しようとすると、権限エラーが発生します。これはセキュリティのためです。これを許可する唯一の方法は、Jenkinsユーザーがこれらのディレクトリに変更を加えることを許可することです。

安全なオプションの1つは、Jenkinsユーザーを他のユーザーと同じグループに追加することです。これを行ったら、読み取りと書き込みを行うディレクトリにアクセス許可を設定して、ユーザーのグループ内のすべてのユーザーが変更できるようにします。

rwxrwx---

上記の権限により、フォルダの所有者と同じグループ内の他のユーザーは変更を加えることができますが、他のユーザーは許可されません。他のユーザーのグループの一部であるユーザーを制御できるため、これは安全です。

編集

ただし、エラーが変更されたようです。許可が拒否されることはもうありません。あなたはまだターミナルを通してそれをすることができますか?ホストキーの検証に失敗したのは、あなたのキーが元々他のユーザーのために作成されたためだと思います。私は上記の答えでこれを行うと言ったことを理解していますが、それは正しい方法ではありません。

jenkinsユーザーとして、次のコマンドを実行できますか?

ssh-keygen (say yes or agree if it asks if you want to replace your current keys)
ssh-copy-id -i ~/.ssh/id_rsa.pub remoteuser@remote_server
ssh remoteuser@remote_server

これが機能する場合は、ターミナルからスクリプトを試してから、jenkinsをもう一度試してください...

于 2013-01-04T19:12:07.263 に答える