QA@IT
«回答へ戻る

chpasswd の説明を追記。

139
 `passwd` コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。Paramiko だけでも pty を扱えるようなので、これで充分なのかもしれません。
 
-  - http://www.lag.net/paramiko/docs/paramiko.Channel-class.html#get_pty
+  - http://www.lag.net/paramiko/docs/p
+aramiko.Channel-class.html#get_pty
   - http://stackoverflow.com/questions/2909481/paramiko-and-pseudo-tty-allocation
 
 Python ではないですが、`passwd` と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。
   - xpasswd - non-interactive passwd command with friendly tools
     - https://github.com/fumiyas/xpasswd
 
-Red Hat Enterprise Linux やそのクローン OS であれば、バッチ処理でパスワードを変更するための `chpasswd` コマンドがあります。`passwd` を相手にするより `chpasswd` を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。
+Red Hat Enterprise Linux (RHEL) やそのクローン OS、Debian, Ubuntu であれば、バッチ処理でパスワードを変更するための `chpasswd` コマンドがあります。`passwd` を相手にするより `chpasswd` を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。
+
+ただし、RHEL の `chpasswd` は PAM が無効になっているので、ローカルの `/etc/shadow` のパスワードしか変更できません。また、Debian で LDAP サーバーのユーザーのパスワード変更を試してみましたが、以下のようになり動作しませんでした。原因は追っていません。
+
+```
+# echo 'foobar:password' |chpasswd
+chpasswd: (user foobar) pam_chauthtok() failed, error:
+User not known to the underlying authentication module
+chpasswd: (line 1, user foobar) password not changed
+```

passwd コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。Paramiko だけでも pty を扱えるようなので、これで充分なのかもしれません。

Python ではないですが、passwd と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。

Red Hat Enterprise Linux (RHEL) やそのクローン OS、Debian, Ubuntu であれば、バッチ処理でパスワードを変更するための chpasswd コマンドがあります。passwd を相手にするより chpasswd を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。

ただし、RHEL の chpasswd は PAM が無効になっているので、ローカルの /etc/shadow のパスワードしか変更できません。また、Debian で LDAP サーバーのユーザーのパスワード変更を試してみましたが、以下のようになり動作しませんでした。原因は追っていません。

# echo 'foobar:password' |chpasswd
chpasswd: (user foobar) pam_chauthtok() failed, error:
User not known to the underlying authentication module
chpasswd: (line 1, user foobar) password not changed
`passwd` コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。Paramiko だけでも pty を扱えるようなので、これで充分なのかもしれません。

  - http://www.lag.net/paramiko/docs/p
aramiko.Channel-class.html#get_pty
  - http://stackoverflow.com/questions/2909481/paramiko-and-pseudo-tty-allocation

Python ではないですが、`passwd` と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。

  - xpasswd - non-interactive passwd command with friendly tools
    - https://github.com/fumiyas/xpasswd

Red Hat Enterprise Linux (RHEL) やそのクローン OS、Debian, Ubuntu であれば、バッチ処理でパスワードを変更するための `chpasswd` コマンドがあります。`passwd` を相手にするより `chpasswd` を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。

ただし、RHEL の `chpasswd` は PAM が無効になっているので、ローカルの `/etc/shadow` のパスワードしか変更できません。また、Debian で LDAP サーバーのユーザーのパスワード変更を試してみましたが、以下のようになり動作しませんでした。原因は追っていません。

```
# echo 'foobar:password' |chpasswd
chpasswd: (user foobar) pam_chauthtok() failed, error:
User not known to the underlying authentication module
chpasswd: (line 1, user foobar) password not changed
```

paramiko.Channel の get_pty() について追記。

139
-`passwd` コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。
+`passwd` コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。Paramiko だけでも pty を扱えるようなので、これで充分なのかもしれません。
+
+  - http://www.lag.net/paramiko/docs/paramiko.Channel-class.html#get_pty
+  - http://stackoverflow.com/questions/2909481/paramiko-and-pseudo-tty-allocation
 
 Python ではないですが、`passwd` と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。
 

passwd コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。Paramiko だけでも pty を扱えるようなので、これで充分なのかもしれません。

Python ではないですが、passwd と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。

Red Hat Enterprise Linux やそのクローン OS であれば、バッチ処理でパスワードを変更するための chpasswd コマンドがあります。passwd を相手にするより chpasswd を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。

`passwd` コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。Paramiko だけでも pty を扱えるようなので、これで充分なのかもしれません。

  - http://www.lag.net/paramiko/docs/paramiko.Channel-class.html#get_pty
  - http://stackoverflow.com/questions/2909481/paramiko-and-pseudo-tty-allocation

Python ではないですが、`passwd` と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。

  - xpasswd - non-interactive passwd command with friendly tools
    - https://github.com/fumiyas/xpasswd

Red Hat Enterprise Linux やそのクローン OS であれば、バッチ処理でパスワードを変更するための `chpasswd` コマンドがあります。`passwd` を相手にするより `chpasswd` を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。

回答を投稿

passwd コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。

Python ではないですが、passwd と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。

Red Hat Enterprise Linux やそのクローン OS であれば、バッチ処理でパスワードを変更するための chpasswd コマンドがあります。passwd を相手にするより chpasswd を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。

`passwd` コマンドは、標準入出力が端末 (tty) であることを期待してます。それらとプロセス間通信するには、疑似端末 (pty(7)) を作成して接続する必要があります。Python で pty(7) を扱うモジュールを探してみてください。

Python ではないですが、`passwd` と通信して非対話でパスワード変更するコードを C で書いたことがあります。参考になるかわかりませんが紹介しておきます。古いコードなので、最近の OS ではうまく動かない可能性があります。

  - xpasswd - non-interactive passwd command with friendly tools
    - https://github.com/fumiyas/xpasswd

Red Hat Enterprise Linux やそのクローン OS であれば、バッチ処理でパスワードを変更するための `chpasswd` コマンドがあります。`passwd` を相手にするより `chpasswd` を利用するほうが簡単だと思います。使い方はオンラインマニュアルを見てください。