Set password on cronjob - cron

So i searched a bit and didn't find answers
I'm trying a cronjob for the first time and i'm trying to push to my Gitlab repository on a determined daily time
I'm trying something like:
10 10 * * * cd/repofolder && git push && login && password
The thing is it works only until the git push command, then login and password are not being typed on the cron job
How do i make the cronjob also type the login and password when the Gitlab asks for it?

I'm having some (permission denied) problem with SSH ( which i didn't have yesterday),
Check with which account your root command is executed: root or your own?
Because the cron job will look for ~/.ssh/id_rsa(.pub) keys in the HOME folder. Make sure the provate key is not passphrase protected.
so for now i kinda want to do this with HTTP,
Then make sure the credentials are cached, through a credential helper. That way, you don't have to enter any credentials. (Again, beware of the account used).

Related

How do I start a cron service on a web server programatically?

I have been stuck on this for a while and this is new territory for me so I need some help. I am working on a project where a cron service is created when a user is created with a web application. However, I am running into problems actually getting the cron service to run. Here is what I have tried
1) Creating a cron service using
crontab -l | { cat; echo "'comand'"; } | crontab -
This creates the job fine. However, it creates it with www-data as the user and those do not show to execute.
I should mention that I am setting path to
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
as I am running a python script that I have made executable using chmod +x and put the appropriate headers to make sure it runs properly (which it does). In addition, all paths are full paths. To be more clear, here is the actual command I am using inside the crontab
*/10 * * * * /home/user/path-to script/script.py --user_id 1 --db_file /home/user/path-to-file/file.db
However, the script never runs.
2) Creating a file under /etc/cron.d, but from my testing, I have realized that this only works if the file is created as a root user, which since the user creating the file is www-data, the job will again, not execute.
for reference, I am doing that as such:
*/10 * * * * user /home/user/path-to script/script.py --user_id 1 --db_file /home/user/path-to-file/file.db
What does work is repeating steps 2 & 3 using a user that is part of the sudo group or is the root user. This tells me that I need to create the cron job using one of those two users, but I am not sure how to do that programmatically when www-data is being used for web activities.
Another option I have considered is using crontab -u user to programmatically add the job to a user I know works, but the issue with that is that in order to do that I need sudo access and I don't want to pass in the sudo password when creating the cronjob or do something that might be potentially dangerous (like removing the need to use sudo as I know that is possible, but in my opinion could be very bad is someone gains access to the account and therefore has escalated privileges)
Help would really be appreciated.
As for the stack, if it's helpful, I am using Ubuntu 18.04.3 (LTS) x64 and Apacahe2

Mercurial - execute as other user

I use a mercurial repository for global configuration. The system config files are linked to /opt/config which is a hg repo owned by root.
I d like all users to be able to update settings from repo i.e. to call hg pull -u in /opt/config
I tried to create the following script
# -rwsr-x--x 1 root users 343 Mar 15 14:10 /bin/update_config
#! /bin/bash
cd /opt/config
hg pull -u
(Pay attention, the s-bit is set) . In this case, hg does not read the settings from /root/.hgrc which contain the HTTP login parameter (user cannot does not know the parameters)
even if I do export HOME=/root the hgrc file is not read.
How should I change my script to make it possible?
EDIT
It seems to be a general permission problem. I use sles11. The line touch /root/bla does not work in this script, why?
Mercurial being a distributed versioning system, it seems to me that you are not using it correctly. If users are required to modify the repository, every user should handle its own repository and then configure it to push into your desired location (/opt/config). Hence, the mercurial workflow will handle the merge problems. If they are only consumers of the repository, you should either 1) create a cron entry to update it automatically or 2) use a continuous integration system like Jenkins or TeamCity that will automatically update the repository when something is pushed to it.
If you still want to realize what you asked, you should look into the sudo command for this purpose. Make the /opt/config ownership to a new passwordless user, configure sudo to allow the switch to this user without password and make the configuration only in ~theuser/.hgrc . This will make it easier to maintain (only a single .hgrc to handle).

git --- How to schedule `git push` on linux?

I think the title describes my problem well: I want to schedule git push. To be more specific, I'd like to know how I can either
tell git to make push at a specified time
tell OS to execute git push at a specified time without re-authentication
(preferably, in such a way that the other attempts to push shall require authentication.).
I'm on linux (Ubuntu 13.04) and thus scripting with bash will be fine.
There is nothing in git which includes:
scheduling (this is provided by Ubuntu with cron jobs)
authentication: it depends on the kind of listener (https, ssh, git, ...) you have on the remote side.
Depending on your remote url, you can, for instance:
use a dedicate public/private ssh key.
use encrypted credentials (username/password) with https url (as in "Configure Git clients, like GitHub for Windows, to not ask for authentication")
you can schedule such jobs using cron.
00 07 * * * git push
will run git push command everyday at 7 AM.

How to input password to git pull command?

I have written scripts for Windows and Linux to essentially set up a new users workspace with all the git repositories from our server.
I would like the user to enter the password for our server once, store it in a local variable, pass that variable to each git pull command, then erase the password variable and exit.
How can I input the password when the git pull command requests it? Both for Windows batch file and a Linux shell script.
Here is code from the Linux script:
#!/bin/bash
echo "Enter password: "
read pswd
clear #No screen peaking
#This is repeated for each repo
location=folderName
mkdir $location
cd $location
git init
git remote add origin git#<server>:$location.git
git pull origin master
#Above prompts for password & is where I want to automatically input $pswd
I've tried various things recommended on SO and elsewhere, such as piping, reading from .txt file, etc. I would prefer to not need anything more than plain old windows cmd and Linux terminal commands. And as this script is just for set up purposes, I do not need to securely store the password permanently with something like ssh agent.
I'm running Windows 7 and Ubuntu 12.10, but this script is meant for setting up new users, so it should ideally work on most distributions.
Synopsis:
git pull "https://<username>:<password>#github.com/<github_account>/<repository_name>.git" <branch_name>
Example:
git pull "https://admin:12345#github.com/Jet/myProject.git" master
Note: This works for me on a bash script
I would really recommend to not try and manage that password step, and delegate that (both on Linux and Windows) to git credential helper.
See:
"Git http - securely remember credentials"
"How to use git with gnome-keyring integration"
The user will enter the password only once per session.
Read the remote url from git and then insert the ID and password (PW) to the url might work.
For example try the following:
cd ${REPOSITORY_DIR}
origin=$(git remote get-url origin)
origin_with_pass=${origin/"//"/"//${USER_ID}:${USER_PW}#"}
git pull ${origin_with_pass} master

how to append a string after a command?

Each time I run a command like this
ssh user#myhost.com
I've to type in the ssh password.
Each time I run a command like this
git push origin master
(pushing code to github)
I've to type in the github password.
Is there any bash thing to write these password inline with the command?
I mean something like
git push origin master < 'mypass'
or
git push origin master | 'mypass'
Use public key authentication for git hub.
For ssh-ing to the host add your key to the host's authorized_keys file(default location is the /home/<user>/.ssh directory of the user you are logging in as).
If the daemon is configured correctly it will simple use your key to authenticate before it prompts for a password.

Resources