Bash Script'lerinde ekranda görünmeden şifreleri okuma


20

Bash komut dosyalarındaki şifreleri terminalde gösterilmeyen araçlar gibi nasıl okunur?

(Yazı tipini siyah üzerine siyah olarak değiştirmek, kopyalaması ve yapıştırması kolay olabilir - bu yüzden çözüm değildir)


3
Bunu okuyan herkes için: yankı açık ve siyah üzerine siyah olan şifreleri okumayın. Parola hala iletilir ve terminal kullandığınız terminal yönergelerini bilmiyorsa, karakterler gözle görülür şekilde yankılanacaktır. Yankıyı kapatın. Kullanım termios, stty, read -s, iste şey.
Alexios

Bu yüzden yazdım, bunun bir çözüm olmadığını;).
Grzegorz Wierzowiecki

Aslında! Bazen insanlar sorular sorar ve yanlış sonuçlara varırlar. :)
Alexios

Yanıtlar:


30

Gönderen help read:

-s        do not echo input coming from a terminal

1
Harika. Benim yazılmadı man read, check-in yapmadım help read. Bunu bildiğim iyi oldu.
Grzegorz Wierzowiecki

3
@GrzegorzWierzowiecki: Yanlış kılavuzu görüntülüyorsunuz. Eğer bash ie kılavuzunu okumak zorunda man bashve orada -s seçeneği bulabilirsinizSilent mode. If input is coming from a terminal, characters are not echoed.
pradeepchhetri

5

Her zaman kullandım stty -echo okumak, sonra yankısını açıp kapatmak ve daha sonra yapılacak stty echo(adamı görüntüleyerek fazla okumak stty- yani man stty). Bu, bir programcı perspektifinden daha yararlıdır, çünkü yankıyı kapatıp standart stdin "okuyucuları" ile Java, C (++), Python vb. Gibi bir programlama dilinden bir parola okuyabilirsiniz.

Bash'da, kullanım şöyle görünebilir:

echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd

Örneğin Python şöyle görünecektir:

from sys import stdout
from os import system as term

uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
    passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
    raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
    raise SystemExit("Password attempt interrupted")
finally:
    term("stty echo") # turn echo on again

print "username:", uname
print "password:", "*" * len(passwd)

Bunu Python'da birçok kez yapmak zorunda kaldım, bu yüzden bu açıdan oldukça iyi biliyorum. Bununla birlikte, bu diğer dillere tercüme etmek çok zor değil.


-1

Sorunuz "araçlar gibi bir şekilde ???" bu yüzden bunun sizin için uygun olup olmadığını tam olarak bilmiyorum:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.