web-dev-qa-db-ja.com

スクリプトを介してAIXパスワードを変更しますか?

スクリプトを介してユーザーのパスワードを変更しようとしています。別のユーザーがパスワードを変更した場合、ユーザーが再度パスワードを変更する必要がある機能があるため、Sudoを使用できません。

AIXはシステム上で実行されています。

残念ながら、chpasswdは使用できません。

インストールする予定ですが、それでも問題があります。

これが私がうまくいくと思ったものです

echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

ただし、一度スクリプトを実行すると、please enter user's old passwordのプロンプトが表示されますが、それらはすべてエコーされませんか?

私はシェルスクリプトの初心者であり、これには困惑しています。

36
Grushton94

あなたが試すことができます:

echo "USERNAME:NEWPASSWORD" | chpasswd

75
Mandar Shinde

GNUpasswdstdinフラグを使用します。

manページから:

   --stdin
          This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.

注:rootユーザーのみ。

$ adduser foo 
$ echo "NewPass" |passwd foo --stdin
Changing password for user foo.
passwd: all authentication tokens updated successfully.

または、expectを使用することもできます。次の簡単なコードでトリックを実行できます。

#!/usr/bin/expect
spawn passwd foo
expect "password:"
send "Xcv15kl\r"
expect "Retype new password:"
send "Xcv15kl\r"
interact

結果

$ ./passwd.xp 
spawn passwd foo
Changing password for user foo.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
21

他の提案に加えて、 HEREDOC を使用してこれを実現することもできます。

差し当たりのケースでは、これは次のようになります。

$ /usr/bin/passwd root <<EOF
test
test
EOF
7
Andrew Yasinsky

改行文字を有効にするにはecho -eが必要です

あなたが書いた

echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

試してみてください

echo -e "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

おそらく、そのコマンドのoldpassword\nの部分は必要ありません。2つの新しいパスワードが必要です。感嘆符の前後に単一引用符を使用することを忘れないでください!

echo -e "new"'!'"passwd123\nnew"'!'"passwd123" | passwd user
6
Elliot Beaumont

あなたが試すことができます :

echo -e "newpasswd123\nnnewpasswd123" | passwdユーザー

3
TehesFR

これだけ

passwd <<EOF
oldpassword
newpassword
newpassword
EOF

Ubuntuマシンからの実際の出力(AIXは利用できません):

user@Host:~$ passwd <<EOF
oldpassword
newpassword
newpassword
EOF

Changing password for user.
(current) UNIX password: Enter new UNIX password: Retype new UNIX password: 
passwd: password updated successfully
user@Host:~$
3
CoreyJJohnson

これは: ssh経由でLinuxサーバーのパスワードを変更するスクリプト

以下のスクリプトは、ファイル(例:./passwdWrapper)として保存し、実行可能(chmod u+x ./passwdWrapper))にする必要があります

#!/usr/bin/expect -f
#wrapper to make passwd(1) be non-interactive
#username is passed as 1st arg, passwd as 2nd

set username [lindex $argv 0]
set password [lindex $argv 1]
set serverid [lindex $argv 2]
set newpassword [lindex $argv 3]

spawn ssh $serverid passwd
expect "assword:"
send "$password\r"
expect "UNIX password:"
send "$password\r"
expect "password:"
send "$newpassword\r"
expect "password:"
send "$newpassword\r"
expect eof

次に、./passwdWrapper $user $password $server $newpasswordを実行して、実際にパスワードを変更します。

注:これには、コマンドを実行するマシンにexpectをインストールする必要があります。 (Sudo apt-get install expect)このスクリプトはCentOS 5/6およびUbuntu 14.04で動作しますが、passwdのプロンプトが変更された場合、expect行を微調整する必要がある場合があります。

2
Loren
Here is the script... 

#!/bin/bash
echo "Please enter username:"
read username
echo "Please enter the new password:"
read -s password1
echo "Please repeat the new password:"
read -s password2

# Check both passwords match
if [ $password1 != $password2 ]; then
echo "Passwords do not match"
 exit    
fi

# Does User exist?
id $username &> /dev/null
if [ $? -eq 0 ]; then
echo "$username exists... changing password."
else
echo "$username does not exist - Password could not be updated for $username"; exit 
fi

# Change password
echo -e "$password1\n$password1" | passwd $username

以下のリンクも参照してください...

http://www.putorius.net/2013/04/bash-script-to-change-users-password.html
1
Ikruzzz

あなたが試すことができます

LINUX

エコーパスワード| passwdユーザー名--stdin

UNIX

echo username:password | chpasswd -c

「-c」引数を使用しない場合、次回パスワードを変更する必要があります。

1

Ansibleを使用して、その中にSudo権限を設定できる場合、このスクリプトを簡単に使用できます。このようなスクリプトを作成する場合は、複数のシステムで実行する必要があります。したがって、それも自動化する必要があります。

0
itengineer

私にとっては、これは迷惑なVMで機能しました:

Sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF
0