what permissions should jenkins have to execute shell-commands without being insecure?

11,050

The whole point of setting the private key's permissions to 600 is that no other user should be able to access it. If you have placed the keys in another user's home directory (/home/anotheruser/.ssh), then neither the Jenkins user, nor anyone else (except root) will be able to access it. This is as designed.

If you want your Jenkins user to be able to use the private key, copy it over to the jenkins users home directory as well (/home//.ssh).

Also, if you are trying to delete/create directories in some other user's directory as the Jenkins user without providing permissions, you will get a permissions error. This is because of security. The only way to allow this is the allow the Jenkins user to make changes to those directories.

One safe option is to add the Jenkins user to the same group as the other user. Once you do this, set the permissions on the directories you want to read from and write to, to allow anyone in the user's group to make changes.

rwxrwx---

The above permissions will allow the owner of the folder and any other users in the same group to make changes, but will not allow anyone else. This is safe, since you control who is part of the other user's group.

EDIT

It looks like your error has changed, though. You're not getting permission denied any more. Can you still do it through terminal? The reason (I think) it is saying that the host key verification has failed is because your key was originally created for the other user. I realise I said to do this in the answer above, but it is not the right way.

As the jenkins user, can you run the following commands:

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

If this works, try your script through the terminal, and then through jenkins again...

Share:
11,050
user1338413
Author by

user1338413

Updated on June 04, 2022

Comments

  • user1338413
    user1338413 almost 2 years

    I have a script (test.sh) on a local server, which works fine when executed in a terminal. The script removes a directory, and recreates a directory local. It then connects to a remote server using "ssh -i $private_key .." and copies a file there.

    When I execute this script in jenkins with

    sh test.sh
    

    it doesnt work. I get the following errors:

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

    Jenkins is on the same server as the script.

    I see that Jenkins is another user and cant do everything that I'm doing as root; how can I set the permissions without losing all security. Especially in case of the private_key, it would be silly to set the permissions to easy - it is currently set to 600 (read and write permission for the owner) and the owner is root.