Скрипт для изменения пароля на серверах Linux через SSH - PullRequest
19 голосов
/ 23 ноября 2011

В нашей ИТ-среде есть несколько Linux-серверов Red Hat. Члены моей команды просят меня написать сценарий (предпочтительно сценарий оболочки) для изменения пароля пользователя на каждом из них за один раз, используя SSH.

Я пытался найти решение, но многие из найденных мной скриптов используют Expect. У нас не установлен Expect на наших серверах, и системные администраторы отказались разрешить нам установить его. Кроме того, пользователи не имеют корневого доступа, поэтому passwd --stdin или chpasswd нельзя использовать.

Есть ли способ написать сценарий, чтобы пользователь мог запустить его и изменить пароль только своего собственного пользователя на всех серверах в списке?

Ответы [ 16 ]

1 голос
/ 23 ноября 2011

Альтернативой, которую вы, возможно, захотите представить своим коллегам, было бы использование ими аутентификации без пароля.Они сгенерируют пару открытый / закрытый ключ и зарегистрируют свой открытый ключ в файле ~ / .ssh / authorized_keys на каждом из серверов, на которые они входят.

0 голосов
/ 02 октября 2016
cat /tmp/passwords | ssh $server sudo chpasswd -e

, если пароль зашифрован, или

cat /tmp/passwords | ssh $server sudo chpasswd

, если пароль не зашифрован.

/ tmp / passwords должен иметь формат «user: password»

0 голосов
/ 08 июня 2015

Реальный вопрос в том, почему они не использовали какие-то службы имен?NIS / Yellow Pages или LDAP, и вам не нужно вручную менять пароли на нескольких серверах.Пользователь меняет свой пароль один раз, и это делается на главном домене.

0 голосов
/ 02 декабря 2013

echo -e "wakka2 \ nwakka2 \ n" | passwd root

0 голосов
/ 03 августа 2012

Если у вас есть ssh, зачем вам пароли? Нажмите открытый ключ пользователя ssh на все серверы, на которые он авторизован, и покончите с этим. Это также позволяет вам легко предоставлять и отзывать доступ, какой вы хотите.

Во время предыдущей $ dayjob, где у нас было буквально десятки тысяч серверов, у них была база данных, на которой инженерам было разрешено использовать какие серверы, а установка ключей ssh ​​была автоматизированной. Почти ни у кого не было пароля на ЛЮБОЙ машине.

0 голосов
/ 24 ноября 2011

Я подумал, что должен поставить свое решение в поле ответа - не уверен, должно ли это быть частью вопроса.

Хорошо, я собрал частично работающее решение, используя предложение Денниса.

servers.txt выглядит так:

server1
server2
server3
.
.
.

Я использую:

for server in `cat servers.txt`; do
ssh $server -l user 'passwd <<EOF
old_pass
new_pass
new_pass
EOF';
done

Это производит:

user@server1's password: **<Type password manually>**
(current) UNIX password: New UNIX password: Retype new UNIX password: Changing password for user user.
Changing password for user
passwd: all authentication tokens updated successfully.
user@server2's password: **<Type password manually>**
(current) UNIX password: New UNIX password: Retype new UNIX password: Changing password for user user.
Changing password for user
passwd: all authentication tokens updated successfully.

Так что здесь мне все еще нужнонабрать мой старый пароль один раз для каждого сервера.Можно ли этого избежать?

...