Я попытался создать пользователя с паролем через ssh (с правами root) следующим образом:
ssh root@123.45.6.7 useradd -p $(openssl passwd -1 1234) newuser
Поступая таким образом, я мог бы успешно создать учетную запись с именем newuser, но я couldn ' t [ms]
Не имеет значения, если я добавляю двойные кавычки:
ssh root@123.45.6.7 "useradd -p $(openssl passwd -1 1234) newuser"
И тогда мне было интересно, могу ли я генерировать хеширование пароль и сохранить его как переменную локально, но все равно не повезло.
password=$(openssl passwd -1 1234)
ssh root@123.45.6.7 "useradd -p $password newuser"
Есть ли что-то, что я пропустил? Спасибо заранее!
Это классическая проблема с цитированием.
Проблема: без цитирования или двойного цитирования подстановки команды ($()) и расширения переменной ($ s в хешированном пароле, возвращенном openssl ] обрабатываются как переменный индикатор) выполняются в локальной среде, а не в удаленной оболочке.
Проблема: используют одинарные кавычки вокруг команды useradd, используемые с ssh в локальной оболочке, чтобы предотвратить подстановку команд и расширение переменной в локальной среде, пусть расширения будут выполняться на удаленной не-login, неинтерактивной оболочке:
ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'
Обратите внимание на цитаты. [ ! d5]
Проблемы с безопасностью:
Вход в систему SSH root должен быть отключен, если вы должны включить его, разрешается только проверка подлинности на основе ключа. MD5 уже нарушен, и без соли вы подвергается простой атаке в Rainbow table (даже не требует грубой форсировки / словарной атаки); openssl passwd действительно генерирует случайную соль. Во всяком случае, вы должны действительно рассмотреть возможность использования SHA-2 с солью. Пароли, переданные в качестве аргументов для команд, могут быть видны другим процессам в (удаленной) системе; это зависит от того, как монтируется procfs (смотрите hidepid), и если команда переписывает себя (это, по-видимому, это не так)Это классическая проблема с цитированием.
Проблема: без цитирования или двойного цитирования подстановки команды ($()) и расширения переменной ($ s в хешированном пароле, возвращенном openssl ] обрабатываются как переменный индикатор) выполняются в локальной среде, а не в удаленной оболочке.
Проблема: используют одинарные кавычки вокруг команды useradd, используемые с ssh в локальной оболочке, чтобы предотвратить подстановку команд и расширение переменной в локальной среде, пусть расширения будут выполняться на удаленной не-login, неинтерактивной оболочке:
ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'
Обратите внимание на цитаты. [ ! d5]
Проблемы с безопасностью:
Вход в систему SSH root должен быть отключен, если вы должны включить его, разрешается только проверка подлинности на основе ключа. MD5 уже нарушен, и без соли вы подвергается простой атаке в Rainbow table (даже не требует грубой форсировки / словарной атаки); openssl passwd действительно генерирует случайную соль. Во всяком случае, вы должны действительно рассмотреть возможность использования SHA-2 с солью. Пароли, переданные в качестве аргументов для команд, могут быть видны другим процессам в (удаленной) системе; это зависит от того, как монтируется procfs (смотрите hidepid), и если команда переписывает себя (это, по-видимому, это не так)Это классическая проблема с цитированием.
Проблема: без цитирования или двойного цитирования подстановки команды ($()) и расширения переменной ($ s в хешированном пароле, возвращенном openssl ] обрабатываются как переменный индикатор) выполняются в локальной среде, а не в удаленной оболочке.
Проблема: используют одинарные кавычки вокруг команды useradd, используемые с ssh в локальной оболочке, чтобы предотвратить подстановку команд и расширение переменной в локальной среде, пусть расширения будут выполняться на удаленной не-login, неинтерактивной оболочке:
ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'
Обратите внимание на цитаты. [ ! d5]
Проблемы с безопасностью:
Вход в систему SSH root должен быть отключен, если вы должны включить его, разрешается только проверка подлинности на основе ключа. MD5 уже нарушен, и без соли вы подвергается простой атаке в Rainbow table (даже не требует грубой форсировки / словарной атаки); openssl passwd действительно генерирует случайную соль. Во всяком случае, вы должны действительно рассмотреть возможность использования SHA-2 с солью. Пароли, переданные в качестве аргументов для команд, могут быть видны другим процессам в (удаленной) системе; это зависит от того, как монтируется procfs (смотрите hidepid), и если команда переписывает себя (это, по-видимому, это не так)Как отметил @heemayl, алгоритм хеш-пароля MD5 устарел, а текущие системы - новые хэши паролей на основе SHA-2, которые имеют настраиваемый коэффициент работы. Но инструмент командной строки OpenSSL, похоже, не поддерживает их.
Утилита chpasswd, однако, позволит вам изменить пароль пользователя в соответствии с системными настройками.
Это должно позволить вам создать нового пользователя и изменить свой пароль на удаленном конце.
echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd'
chpasswd берет имя пользователя и пароль из stdin, а не в командной строке , Это фактически является преимуществом, поскольку аргументы командной строки видны для всех других процессов в системе, поэтому, если запустить openssl passwd на пульте дистанционного управления, пароль будет мгновенно виден всем процессам в системе.
I «Не знаю, есть ли готовая утилита командной строки для генерации хэшей паролей, известных функции системы crypt(3). Perl имеет встроенную утилиту chpasswd , но нужно будет создать правильную соль.
Как отметил @heemayl, алгоритм хеш-пароля MD5 устарел, а текущие системы - новые хэши паролей на основе SHA-2, которые имеют настраиваемый коэффициент работы. Но инструмент командной строки OpenSSL, похоже, не поддерживает их.
Утилита chpasswd, однако, позволит вам изменить пароль пользователя в соответствии с системными настройками.
Это должно позволить вам создать нового пользователя и изменить свой пароль на удаленном конце.
echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd'
chpasswd берет имя пользователя и пароль из stdin, а не в командной строке , Это фактически является преимуществом, поскольку аргументы командной строки видны для всех других процессов в системе, поэтому, если запустить openssl passwd на пульте дистанционного управления, пароль будет мгновенно виден всем процессам в системе.
I «Не знаю, есть ли готовая утилита командной строки для генерации хэшей паролей, известных функции системы crypt(3). Perl имеет встроенную утилиту chpasswd , но нужно будет создать правильную соль.
Как отметил @heemayl, алгоритм хеш-пароля MD5 устарел, а текущие системы - новые хэши паролей на основе SHA-2, которые имеют настраиваемый коэффициент работы. Но инструмент командной строки OpenSSL, похоже, не поддерживает их.
Утилита chpasswd, однако, позволит вам изменить пароль пользователя в соответствии с системными настройками.
Это должно позволить вам создать нового пользователя и изменить свой пароль на удаленном конце.
echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd'
chpasswd берет имя пользователя и пароль из stdin, а не в командной строке , Это фактически является преимуществом, поскольку аргументы командной строки видны для всех других процессов в системе, поэтому, если запустить openssl passwd на пульте дистанционного управления, пароль будет мгновенно виден всем процессам в системе.
I «Не знаю, есть ли готовая утилита командной строки для генерации хэшей паролей, известных функции системы crypt(3). Perl имеет встроенную утилиту chpasswd , но нужно будет создать правильную соль.