6

root sshセッションでセキュリティ対策を実装する一環として、rootユーザーのログインからn秒後にスクリプトを開始し、ユーザーパスワードを変更してユーザーを自動的にログアウトする方法を考案しようとしています。

パスワードを黙って変更しようとして立ち往生しています。私は次のコードを持っています:

echo -e "new\nnew" | passwd -q

これは、マニュアルページに記載されているようにパスワードを「静かに」変更する代わりに、次のように出力します。

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

これはあまり役に立ちません。

stdoutとstderrを配管しようとしましたが、配管を誤解していると思います。

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q > /dev/null
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q /dev/null 2>&1
passwd: user '/dev/null' does not exist

スクリプトを介して静かにパスワードを変更する正しい方法は何ですか?

4

3 に答える 3

5

stdout と sterr の両方をリダイレクトする場合:

echo "..." | passwd &> /dev/null

これは

echo "..." | passwd > /dev/null 2>&1

これは、「stdout を /dev/null にリダイレクトしてから、stderr を stdout にリダイレクト (複製) する」ことを意味します。このようにして、stdoutとstderrの両方をnullにリダイレクトします...しかし、それでは十分ではないかもしれません(この場合はそうなると思います)。しかし、理論的には、プログラムは端末に直接書き込む可能性があります。たとえば、このスクリプト

$ cat test.sh
echo stdout
echo stderr 1 1>&2
echo stderr 2 >/dev/stderr
echo stderr 3 >/dev/fd/2
echo bad luck > /dev/tty

$ ./test.sh &> /dev/null
bad luck

この出力を取り除くには、たとえばhttp://empty.sourceforge.net/などの疑似端末でプログラムを強制的に実行する必要があります。しかし、それは単なる補足です &> /dev/null は正常に動作します。

于 2013-05-10T19:53:19.937 に答える
0

これは私のために働いた

echo "passssssword" | passwd root --stdin > /dev/null

注意: --stdin root ユーザーのみで動作します

于 2013-02-22T11:46:47.600 に答える