次のスクリプト(Ubuntu 22.04で実行)を使用して、SSHを介してリモートサーバーにユーザーアカウントを追加しようとしています。
#!/bin/bash
protect="y"
ssh -i ssh_key [email protected] <<END
sudo deluser testuser
if [[ "$protect" =~ ^[yY]*$ ]]; then sudo useradd -p $(openssl passwd -1 "password") testuser && echo "User added successfully"; fi
END
read -n 1 -srp "Press any key to exit."
User added successfully
確認メッセージが表示され、通常はユーザーが追加されます。ただし、その資格情報を使用してアカウントにログインすることはできません。
サーバーから直接このコマンドを1つずつ実行しようとすると、すべてがうまく機能し、アカウントにログインできるため、引用エスケープの問題であると考えて、次のようないくつかのバリエーションを試しました。
\""password"\"
"\"password"\"
\""password\""
"\"password\""
しかし、それらのどれも働かなかった。
助けてください。
答え1
コマンドを実行するたびに、別の出力が表示されます。私はこのコマンドを使用しますこの回答ではデモの質問:
openssl passwd -6 -salt xyz password
$
次に始まる出力の変数は、次のように置き換えられます。
$ openssl passwd -6 -salt xyz password
$6$xyz$ShNnbwk5fmsyVIlzOf8zEg4YdEH2aWRSuY4rJHbzLZRlWcoXbxxoI0hfn0mdXiJCdBJ/lTpKjk.vu5NZOv0UM0
$ bash << EOF
echo $(openssl passwd -6 -salt xyz password)
EOF
/lTpKjk.vu5NZOv0UM0
openssl
リモートホストで次のコマンドを実行できます。
#!/bin/bash
protect="y"
if [[ "$protect" =~ ^[yY]*$ ]]; then
ssh -i ssh_key [email protected] 'sudo useradd -p $(openssl passwd -1 "password") testuser && echo "User added successfully"'
fi
read -n 1 -srp "Press any key to exit."
次の違いを参照してください。
$ ssh HOST 'echo "$(openssl passwd -6 -salt xyz password)"'
$ ssh HOST echo "$(openssl passwd -6 -salt xyz password)"