-1

I've built a script "createcontainer.sh" to automatically create a container. I call the script as follows:

./createdocker.sh newuser newpass

Internal to the script, the two arguments are assigned to variables as follows:

USERNAME=$1     <-- thus USERNAME=newuser
PASSWORD=$2     <-- thus PASSWORD=newpass

The goal is to create the container (this works), log into it with "root/originalpassword" combination I created in the original image (this works), then add "newuser/newpass" credentials which can then be used to access the container via SSH (this appears to work but doesn't actually work).

Inside createdocker.sh is the following line:

/usr/bin/sshpass -p $ORIGINALPASSWORD ssh -p $PORT -o StrictHostKeyChecking=no root@$IP $SCRIPT

What this does is tell the "createcontainer.sh" script to log into the $IP of the container on $PORT with root and $ORIGINALPASSWORD, automatically accept the SSH host key, then execute $SCRIPT which is defined as follows:

SCRIPT="adduser $USERNAME;\                                    <-- add newuser
echo -e $PASSWORD\n$PASSWORD | (passwd --stdin $USERNAME);\    <-- set newpass
echo ssh username: $USERNAME;\
echo ssh password: $PASSWORD;\
echo Instance Login Success;\
exit"

As a result, the behavior of my script is as follows:

[root@netunique docker-sshd]# ./signup_createdocker.sh newuser newpass
Instance Created
adduser newuser;echo -e newpass\nnewpass | (passwd --stdin newuser);echo ssh username: newuser;echo ssh password: newpass;echo Instance Login Success;exit
Warning: Permanently added '[localhost]:32936' (RSA) to the list of known hosts.
Changing password for user newuser.
passwd: all authentication tokens updated successfully.    <-- appears 'set newpass' worked
ssh username: newuser
ssh password: newpass
Instance Login Success

I then attempt to log into the container with the new credentials:

[root@netunique docker-sshd]# ssh -p 32936 newuser@localhost
myuser@localhost's password:                   <-- here I type 'newpass'
Permission denied, please try again.           <-- here the login fails
myuser@localhost's password: 

I think my problem has to do with my quotes (") and evaluation of variables within those quotes. Specifically the in SCRIPT which starts with "echo -e".

If I actually (without the script) log into the container manually and issue the following commands, everything works fine. I'm able to log out of the container than back in with newuser/newpass credentials and I can get into the container just fine.

adduser newuser
echo -e "newpass\nnewpass" | (passwd --stdin newuser)

Notice above though that newpass\nnewpass are surrounded in quotes (") whereas in SCRIPT the entire string is surrounded in quotes ("), not specifically the echo -e statement. If anyone can advise how to fix this, it would help me out a lot. Thanks in advance for the help.

Dan
  • 331
  • 6
  • 17

1 Answers1

0

BEFORE

SCRIPT="adduser $USERNAME;\                                    <-- add newuser
echo -e $PASSWORD\n$PASSWORD | (passwd --stdin $USERNAME);\    <-- set newpass
echo ssh username: $USERNAME;\
echo ssh password: $PASSWORD;\
echo Instance Login Success;\
exit"

AFTER

SCRIPT="adduser $USERNAME;\
echo -e \"$PASSWORD\n$PASSWORD\" | (passwd --stdin $USERNAME);\
echo ssh username: $USERNAME;\
echo ssh password: $PASSWORD;\
echo Instance Login Success;\
exit"

I had to include quotes (") around $PASSWORD\n$PASSWORD (which I had previously tried), but I also had to escape them with blackslash (\) like this: \"

Dan
  • 331
  • 6
  • 17