【问题标题】:docker container - ssh adduser passwddocker 容器 - ssh adduser passwd
【发布时间】:2018-05-07 22:46:19
【问题描述】:

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

【问题讨论】:

    标签: string ssh quotes passwd sshpass


    【解决方案1】:

    之前

    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 (我之前尝试过)周围包含引号 ("),但我还必须使用黑斜线 (\) 将它们转义,如下所示:\"

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2016-09-08
      • 2017-06-22
      • 2017-01-22
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2015-07-28
      相关资源
      最近更新 更多