Change password in headless mode
I am building a script to fully automate a VPS setup, and I need to change the root password. I would like to avoid typing it as the script is running through SSH.
Is there a way to redirect an arbitrary value to the input of passwd command?
EDIT
I know for passwd < passwd_file.txt containing the password twice... I would like to know if there is a more elegant way as it seems a little bit clumsy to use a temp file for this purpose.
shell ubuntu io-redirection password
add a comment |
I am building a script to fully automate a VPS setup, and I need to change the root password. I would like to avoid typing it as the script is running through SSH.
Is there a way to redirect an arbitrary value to the input of passwd command?
EDIT
I know for passwd < passwd_file.txt containing the password twice... I would like to know if there is a more elegant way as it seems a little bit clumsy to use a temp file for this purpose.
shell ubuntu io-redirection password
Why not just set a disabled passwordusermod -p '*' root, and setup SSH key-based authentication?
– Zoredache
Apr 13 '12 at 18:16
I would like to keep a (strong) password to be able to log from another user.
– Mike Aski
Apr 14 '12 at 5:45
expect also works for may things
– RobotHumans
Apr 14 '12 at 6:06
I finally found the solution: see below...
– Mike Aski
Apr 14 '12 at 6:07
add a comment |
I am building a script to fully automate a VPS setup, and I need to change the root password. I would like to avoid typing it as the script is running through SSH.
Is there a way to redirect an arbitrary value to the input of passwd command?
EDIT
I know for passwd < passwd_file.txt containing the password twice... I would like to know if there is a more elegant way as it seems a little bit clumsy to use a temp file for this purpose.
shell ubuntu io-redirection password
I am building a script to fully automate a VPS setup, and I need to change the root password. I would like to avoid typing it as the script is running through SSH.
Is there a way to redirect an arbitrary value to the input of passwd command?
EDIT
I know for passwd < passwd_file.txt containing the password twice... I would like to know if there is a more elegant way as it seems a little bit clumsy to use a temp file for this purpose.
shell ubuntu io-redirection password
shell ubuntu io-redirection password
edited Apr 28 '12 at 16:12
Caleb
50.3k9146191
50.3k9146191
asked Apr 13 '12 at 16:46
Mike Aski
12318
12318
Why not just set a disabled passwordusermod -p '*' root, and setup SSH key-based authentication?
– Zoredache
Apr 13 '12 at 18:16
I would like to keep a (strong) password to be able to log from another user.
– Mike Aski
Apr 14 '12 at 5:45
expect also works for may things
– RobotHumans
Apr 14 '12 at 6:06
I finally found the solution: see below...
– Mike Aski
Apr 14 '12 at 6:07
add a comment |
Why not just set a disabled passwordusermod -p '*' root, and setup SSH key-based authentication?
– Zoredache
Apr 13 '12 at 18:16
I would like to keep a (strong) password to be able to log from another user.
– Mike Aski
Apr 14 '12 at 5:45
expect also works for may things
– RobotHumans
Apr 14 '12 at 6:06
I finally found the solution: see below...
– Mike Aski
Apr 14 '12 at 6:07
Why not just set a disabled password
usermod -p '*' root, and setup SSH key-based authentication?– Zoredache
Apr 13 '12 at 18:16
Why not just set a disabled password
usermod -p '*' root, and setup SSH key-based authentication?– Zoredache
Apr 13 '12 at 18:16
I would like to keep a (strong) password to be able to log from another user.
– Mike Aski
Apr 14 '12 at 5:45
I would like to keep a (strong) password to be able to log from another user.
– Mike Aski
Apr 14 '12 at 5:45
expect also works for may things
– RobotHumans
Apr 14 '12 at 6:06
expect also works for may things
– RobotHumans
Apr 14 '12 at 6:06
I finally found the solution: see below...
– Mike Aski
Apr 14 '12 at 6:07
I finally found the solution: see below...
– Mike Aski
Apr 14 '12 at 6:07
add a comment |
                                4 Answers
                                4
                        
active
oldest
votes
You don't say what version of UNIX you're using, but on Linux the passwd(1) man page shows:
   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.
So all you have to do is run:
echo 'somepassword' | passwd --stdin
Edit to add: more portable is chpasswd which exists on (at least) both Red Hat and Ubuntu:
echo 'someuser:somepassword' | chpasswd
See the man page.
I would have been really fond of this option, but it does not exists on Ubuntu... :-(
– Mike Aski
Apr 14 '12 at 5:47
You can use chpasswd. That exists on both Red Hat and Ubuntu.
– MadScientist
Apr 28 '12 at 15:33
add a comment |
I think you'll have a tough time doing what you want.  The passwd command goes to great lengths to avoid just the situation you describe, so as to hinder any password guessing schemes, and circumvent a lot of potential security problems.
Can you use the useradd command?  Typical linux useradd has a "-p" or "--password" option that lets you set the encrypted password to some value.  You can get that encrypted password out of the file /etc/shadow.
The other option is to monkey with the file /etc/shadow.  It shouldn't be too hard to used sed or something to change the salted, encrypted root password.
First, thanks for your quick reply. Butuseraddis not recommended, man pages says I should preferadduser... And second option is yet worst than mine... ;-P
– Mike Aski
Apr 13 '12 at 16:53
1
@MikeAski, On many systemsadduseris simply a front-end touseradd. For general interactive usage, theaddusercommand is preferred since it usually has a number of useful defaults. From a scriptuseradd, or in this caseusermodis potentially a valid choice.
– Zoredache
Apr 13 '12 at 18:15
add a comment |
Yes! Found the way. printf saved me:
HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORDn$ROOT_PASSWORDn" | passwd
EOF
That is to me the best way out: clean & perfectly secure as password never get on local nether remote host in clear (through ssh connection only).
add a comment |
You could wrap tmux around passwd:
tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'n'
tmux send-keys -t chpwd NEWPASSWORD$'n'
Run as root of course.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f36378%2fchange-password-in-headless-mode%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
                                4 Answers
                                4
                        
active
oldest
votes
                                4 Answers
                                4
                        
active
oldest
votes
active
oldest
votes
active
oldest
votes
You don't say what version of UNIX you're using, but on Linux the passwd(1) man page shows:
   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.
So all you have to do is run:
echo 'somepassword' | passwd --stdin
Edit to add: more portable is chpasswd which exists on (at least) both Red Hat and Ubuntu:
echo 'someuser:somepassword' | chpasswd
See the man page.
I would have been really fond of this option, but it does not exists on Ubuntu... :-(
– Mike Aski
Apr 14 '12 at 5:47
You can use chpasswd. That exists on both Red Hat and Ubuntu.
– MadScientist
Apr 28 '12 at 15:33
add a comment |
You don't say what version of UNIX you're using, but on Linux the passwd(1) man page shows:
   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.
So all you have to do is run:
echo 'somepassword' | passwd --stdin
Edit to add: more portable is chpasswd which exists on (at least) both Red Hat and Ubuntu:
echo 'someuser:somepassword' | chpasswd
See the man page.
I would have been really fond of this option, but it does not exists on Ubuntu... :-(
– Mike Aski
Apr 14 '12 at 5:47
You can use chpasswd. That exists on both Red Hat and Ubuntu.
– MadScientist
Apr 28 '12 at 15:33
add a comment |
You don't say what version of UNIX you're using, but on Linux the passwd(1) man page shows:
   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.
So all you have to do is run:
echo 'somepassword' | passwd --stdin
Edit to add: more portable is chpasswd which exists on (at least) both Red Hat and Ubuntu:
echo 'someuser:somepassword' | chpasswd
See the man page.
You don't say what version of UNIX you're using, but on Linux the passwd(1) man page shows:
   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.
So all you have to do is run:
echo 'somepassword' | passwd --stdin
Edit to add: more portable is chpasswd which exists on (at least) both Red Hat and Ubuntu:
echo 'someuser:somepassword' | chpasswd
See the man page.
edited Apr 28 '12 at 15:35
answered Apr 13 '12 at 19:32
MadScientist
1,92811316
1,92811316
I would have been really fond of this option, but it does not exists on Ubuntu... :-(
– Mike Aski
Apr 14 '12 at 5:47
You can use chpasswd. That exists on both Red Hat and Ubuntu.
– MadScientist
Apr 28 '12 at 15:33
add a comment |
I would have been really fond of this option, but it does not exists on Ubuntu... :-(
– Mike Aski
Apr 14 '12 at 5:47
You can use chpasswd. That exists on both Red Hat and Ubuntu.
– MadScientist
Apr 28 '12 at 15:33
I would have been really fond of this option, but it does not exists on Ubuntu... :-(
– Mike Aski
Apr 14 '12 at 5:47
I would have been really fond of this option, but it does not exists on Ubuntu... :-(
– Mike Aski
Apr 14 '12 at 5:47
You can use chpasswd. That exists on both Red Hat and Ubuntu.
– MadScientist
Apr 28 '12 at 15:33
You can use chpasswd. That exists on both Red Hat and Ubuntu.
– MadScientist
Apr 28 '12 at 15:33
add a comment |
I think you'll have a tough time doing what you want.  The passwd command goes to great lengths to avoid just the situation you describe, so as to hinder any password guessing schemes, and circumvent a lot of potential security problems.
Can you use the useradd command?  Typical linux useradd has a "-p" or "--password" option that lets you set the encrypted password to some value.  You can get that encrypted password out of the file /etc/shadow.
The other option is to monkey with the file /etc/shadow.  It shouldn't be too hard to used sed or something to change the salted, encrypted root password.
First, thanks for your quick reply. Butuseraddis not recommended, man pages says I should preferadduser... And second option is yet worst than mine... ;-P
– Mike Aski
Apr 13 '12 at 16:53
1
@MikeAski, On many systemsadduseris simply a front-end touseradd. For general interactive usage, theaddusercommand is preferred since it usually has a number of useful defaults. From a scriptuseradd, or in this caseusermodis potentially a valid choice.
– Zoredache
Apr 13 '12 at 18:15
add a comment |
I think you'll have a tough time doing what you want.  The passwd command goes to great lengths to avoid just the situation you describe, so as to hinder any password guessing schemes, and circumvent a lot of potential security problems.
Can you use the useradd command?  Typical linux useradd has a "-p" or "--password" option that lets you set the encrypted password to some value.  You can get that encrypted password out of the file /etc/shadow.
The other option is to monkey with the file /etc/shadow.  It shouldn't be too hard to used sed or something to change the salted, encrypted root password.
First, thanks for your quick reply. Butuseraddis not recommended, man pages says I should preferadduser... And second option is yet worst than mine... ;-P
– Mike Aski
Apr 13 '12 at 16:53
1
@MikeAski, On many systemsadduseris simply a front-end touseradd. For general interactive usage, theaddusercommand is preferred since it usually has a number of useful defaults. From a scriptuseradd, or in this caseusermodis potentially a valid choice.
– Zoredache
Apr 13 '12 at 18:15
add a comment |
I think you'll have a tough time doing what you want.  The passwd command goes to great lengths to avoid just the situation you describe, so as to hinder any password guessing schemes, and circumvent a lot of potential security problems.
Can you use the useradd command?  Typical linux useradd has a "-p" or "--password" option that lets you set the encrypted password to some value.  You can get that encrypted password out of the file /etc/shadow.
The other option is to monkey with the file /etc/shadow.  It shouldn't be too hard to used sed or something to change the salted, encrypted root password.
I think you'll have a tough time doing what you want.  The passwd command goes to great lengths to avoid just the situation you describe, so as to hinder any password guessing schemes, and circumvent a lot of potential security problems.
Can you use the useradd command?  Typical linux useradd has a "-p" or "--password" option that lets you set the encrypted password to some value.  You can get that encrypted password out of the file /etc/shadow.
The other option is to monkey with the file /etc/shadow.  It shouldn't be too hard to used sed or something to change the salted, encrypted root password.
answered Apr 13 '12 at 16:52
Bruce Ediger
34.7k566119
34.7k566119
First, thanks for your quick reply. Butuseraddis not recommended, man pages says I should preferadduser... And second option is yet worst than mine... ;-P
– Mike Aski
Apr 13 '12 at 16:53
1
@MikeAski, On many systemsadduseris simply a front-end touseradd. For general interactive usage, theaddusercommand is preferred since it usually has a number of useful defaults. From a scriptuseradd, or in this caseusermodis potentially a valid choice.
– Zoredache
Apr 13 '12 at 18:15
add a comment |
First, thanks for your quick reply. Butuseraddis not recommended, man pages says I should preferadduser... And second option is yet worst than mine... ;-P
– Mike Aski
Apr 13 '12 at 16:53
1
@MikeAski, On many systemsadduseris simply a front-end touseradd. For general interactive usage, theaddusercommand is preferred since it usually has a number of useful defaults. From a scriptuseradd, or in this caseusermodis potentially a valid choice.
– Zoredache
Apr 13 '12 at 18:15
First, thanks for your quick reply. But
useradd is not recommended, man pages says I should prefer adduser... And second option is yet worst than mine... ;-P– Mike Aski
Apr 13 '12 at 16:53
First, thanks for your quick reply. But
useradd is not recommended, man pages says I should prefer adduser... And second option is yet worst than mine... ;-P– Mike Aski
Apr 13 '12 at 16:53
1
1
@MikeAski, On many systems
adduser is simply a front-end to useradd.  For general interactive usage, the adduser command is preferred since it usually has a number of useful defaults.  From a script useradd, or in this case usermod is potentially a valid choice.– Zoredache
Apr 13 '12 at 18:15
@MikeAski, On many systems
adduser is simply a front-end to useradd.  For general interactive usage, the adduser command is preferred since it usually has a number of useful defaults.  From a script useradd, or in this case usermod is potentially a valid choice.– Zoredache
Apr 13 '12 at 18:15
add a comment |
Yes! Found the way. printf saved me:
HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORDn$ROOT_PASSWORDn" | passwd
EOF
That is to me the best way out: clean & perfectly secure as password never get on local nether remote host in clear (through ssh connection only).
add a comment |
Yes! Found the way. printf saved me:
HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORDn$ROOT_PASSWORDn" | passwd
EOF
That is to me the best way out: clean & perfectly secure as password never get on local nether remote host in clear (through ssh connection only).
add a comment |
Yes! Found the way. printf saved me:
HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORDn$ROOT_PASSWORDn" | passwd
EOF
That is to me the best way out: clean & perfectly secure as password never get on local nether remote host in clear (through ssh connection only).
Yes! Found the way. printf saved me:
HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORDn$ROOT_PASSWORDn" | passwd
EOF
That is to me the best way out: clean & perfectly secure as password never get on local nether remote host in clear (through ssh connection only).
answered Apr 14 '12 at 6:06
Mike Aski
12318
12318
add a comment |
add a comment |
You could wrap tmux around passwd:
tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'n'
tmux send-keys -t chpwd NEWPASSWORD$'n'
Run as root of course.
add a comment |
You could wrap tmux around passwd:
tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'n'
tmux send-keys -t chpwd NEWPASSWORD$'n'
Run as root of course.
add a comment |
You could wrap tmux around passwd:
tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'n'
tmux send-keys -t chpwd NEWPASSWORD$'n'
Run as root of course.
You could wrap tmux around passwd:
tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'n'
tmux send-keys -t chpwd NEWPASSWORD$'n'
Run as root of course.
answered Apr 13 '12 at 17:25
Thor
11.6k13358
11.6k13358
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
 
But avoid …
- Asking for help, clarification, or responding to other answers.
 - Making statements based on opinion; back them up with references or personal experience.
 
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
 
But avoid …
- Asking for help, clarification, or responding to other answers.
 - Making statements based on opinion; back them up with references or personal experience.
 
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f36378%2fchange-password-in-headless-mode%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Why not just set a disabled password
usermod -p '*' root, and setup SSH key-based authentication?– Zoredache
Apr 13 '12 at 18:16
I would like to keep a (strong) password to be able to log from another user.
– Mike Aski
Apr 14 '12 at 5:45
expect also works for may things
– RobotHumans
Apr 14 '12 at 6:06
I finally found the solution: see below...
– Mike Aski
Apr 14 '12 at 6:07