-1

我已经构建了一个脚本“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 语句。如果有人可以建议如何解决此问题,那将对我有很大帮助。在此先感谢您的帮助。

4

1 回答 1

0

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"

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

我必须在 $PASSWORD\n$PASSWORD (我之前尝试过)周围包含引号(“),但我还必须用黑斜线(\)将它们转义,如下所示:\”

于 2017-11-24T06:03:40.553 回答