2017-11-23 3 views
-2

Ich habe ein Skript "createcontainer.sh" erstellt, um automatisch einen Container zu erstellen. Ich nenne das Skript wie folgt:docker container - ssh adduser passwd

./createdocker.sh newuser newpass 

Interne an das Skript werden die beiden Argumente auf Variablen wie folgt zugeordnet:

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

Das Ziel ist, den Behälter (das funktioniert) zu erstellen, melden Sie sich es mit "root/originalpassword" Kombination, die ich im Originalbild erstellt habe (das funktioniert), dann "newuser/newpass" Credentials hinzufügen, die dann verwendet werden können, um per SSH auf den Container zuzugreifen (dies scheint zu funktionieren, funktioniert aber nicht) .

Innen createdocker.sh ist die folgende Zeile ein:

/usr/bin/sshpass -p $ORIGINALPASSWORD ssh -p $PORT -o StrictHostKeyChecking=no [email protected]$IP $SCRIPT 

Was das bedeutet ist das „createcontainer.sh“ Skript anweisen, in die $ IP des Behälters mit Wurzel auf $ PORT einzuloggen und $ ORIGINALPASSWORD, automatisch den SSH-Host-Schlüssel akzeptiert, dann $ SCRIPT auszuführen, die wie folgt definiert ist:

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" 

als Ergebnis ist das Verhalten von meinem Skript wie folgt:

[[email protected] 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 

Ich versuche dann mit den neuen Anmeldeinformationen in die Behälter zu protokollieren:

[[email protected] docker-sshd]# ssh -p 32936 [email protected] 
[email protected]'s password:     <-- here I type 'newpass' 
Permission denied, please try again.   <-- here the login fails 
[email protected]'s password: 

Ich glaube, mein Problem hat mit meinen Anführungszeichen (") und Auswertung von Variablen innerhalb dieser Zitate zu tun. Speziell das in SCRIPT, das mit "echo -e" beginnt.

Wenn ich mich tatsächlich (ohne das Skript) manuell in den Container anmelden und die folgenden Befehle ausstellen, funktioniert alles einwandfrei. Ich bin in der Lage, mich aus dem Container als mit neuen Benutzer/newpass-Anmeldeinformationen abzumelden, und ich kann in den Container gut gehen.

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

Hinweis oben, obwohl diese newpass \ nnewpass ist in Anführungszeichen ("), während in SCRIPT der gesamte Zeichenfolge in Anführungszeichen ist umgeben ("), nicht speziell das echo -e-Anweisung. Wenn jemand Ratschläge geben kann, wie das zu beheben ist, würde es mir sehr helfen. Vielen Dank im Voraus für die Hilfe.

Antwort

0

VOR

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" 

NACH

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

ich Zitate enthalten musste (") um \ n $ password $ password (was ich vorher versucht hatte), aber ich auch musste ihnen mit blackslash (\) wie folgt entkommen: \ "