Standardmäßig liest sudo
und su
liest kein Kennwort von stdin. Sie versuchen, ein Endgerät direkt zu verwenden (einige Implementierungen können sich sogar beschweren, wenn sie in einer Pipe verwendet werden). Es gibt eine sudo -S
Option zum Ändern dieses Verhaltens, aber meines Wissens gibt es keine ähnliche Option für su
.
Lösung: verwenden expect
.
expect
ist ein Programm, das nach einem Skript mit anderen interaktiven Programmen "spricht". Nach dem Skriptexpect
wissen Sie, was von einem Programm erwartet werden kann und wie die richtige Antwort sein soll.[…]
Im Allgemeinen
expect
ist es nützlich, jedes Programm auszuführen, das eine Interaktion zwischen dem Programm und dem Benutzer erfordert. Es ist lediglich notwendig, dass die Interaktion programmatisch charakterisiert werden kann.
In Ihrem Fall kann das Skript sein:
#!/usr/bin/expect log_user 0 spawn /bin/su - otherusr expect "Password: " send "mypassword\n" interact
Ich empfehle, dieses Skript nur für Sie zugänglich zu machen ( chmod go-rwx
). Andere Benutzer sollten es nicht lesen dürfen, da es mypassword
Klartext enthält . Sie sollten es nicht ausführen dürfen, da es Zugriff auf otherusr
die Shell von erlaubt .