我已经构建了一个脚本“createcontainer.sh”来自动创建一个容器。我调用脚本如下:
./createdocker.sh newuser newpass
在脚本内部,两个参数被分配给变量,如下所示:
USERNAME=$1 <-- thus USERNAME=newuser
PASSWORD=$2 <-- thus PASSWORD=newpass
目标是创建容器(可行),使用我在原始映像中创建的“root/originalpassword”组合登录(可行),然后添加可用于访问容器的“newuser/newpass”凭据通过 SSH(这似乎有效,但实际上不起作用)。
createdocker.sh 内部是以下行:
/usr/bin/sshpass -p $ORIGINALPASSWORD ssh -p $PORT -o StrictHostKeyChecking=no root@$IP $SCRIPT
这样做是告诉“createcontainer.sh”脚本使用root和$ORIGINALPASSWORD登录到 $PORT 上容器的 $IP ,自动接受 SSH 主机密钥,然后执行 $SCRIPT,其定义如下:
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"
结果,我的脚本的行为如下:
[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
然后我尝试使用新凭据登录到容器:
[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:
我认为我的问题与我的引号(“)和这些引号中变量的评估有关。特别是在 SCRIPT 中以“echo -e”开头。
如果我实际上(没有脚本)手动登录到容器并发出以下命令,一切正常。我能够退出容器而不是使用 newuser/newpass 凭据重新登录,并且我可以很好地进入容器。
adduser newuser
echo -e "newpass\nnewpass" | (passwd --stdin newuser)
请注意,尽管 newpass\nnewpass 用引号 (") 括起来,而在 SCRIPT 中,整个字符串都用引号 (") 括起来,而不是特别是 echo -e 语句。如果有人可以建议如何解决此问题,那将对我有很大帮助。在此先感谢您的帮助。