बैश लिपियों में स्क्रीन पर दिखाए बिना पासवर्ड पढ़ना


20

कैसे उपकरणों पर एक तरह से बैश स्क्रिप्ट में पासवर्ड पढ़ने के लिए जो इसे टर्मिनल पर नहीं दिखा रहे हैं?

(फ़ॉन्ट को काले रंग में बदलने के लिए कॉपी और पेस्ट करना आसान हो सकता है - इसलिए इसका कोई हल नहीं है)


3
इसे पढ़ने वाले किसी व्यक्ति के लिए: इको ऑन और ब्लैक-ऑन-ब्लैक वाले पासवर्ड में न पढ़ें। पासवर्ड अभी भी प्रेषित है, और यदि टर्मिनल आपके द्वारा उपयोग किए जाने वाले टर्मिनल निर्देशों को नहीं जानता है, तो अक्षर स्पष्ट रूप से गूंजेंगे। प्रतिध्वनि बंद करें। का प्रयोग करें termios, stty, read -s, कुछ भी है कि यह करता है।
अलेक्सियो

इसलिए मैंने लिखा है, कि यह एक समाधान नहीं है;)।
ग्राज़ोरेज़ विर्ज़ोवेकी

वास्तव में! कभी-कभी लोग प्रश्नों को छोड़ देते हैं और गुमराह करने वाले निष्कर्ष पर आते हैं। :)
एलेक्सिओस

जवाबों:


30

से help read:

-s        do not echo input coming from a terminal

1
महान। यह मेरे में नहीं लिखा है man read, मैं में जाँच नहीं है help read। जानकार अच्छा लगा।
ग्रेज़गोरज़ विएर्ज़ोवेकी

3
@GrzegorzWierzowiecki: आप गलत मैनुअल देख रहे हैं। आपको बैश के मैनुअल को पढ़ना man bashहोगा और वहां आपको -s विकल्प मिल सकता हैSilent mode. If input is coming from a terminal, characters are not echoed.
pradeepchhetri

5

मैं हमेशा stty -echoगूँजता रहता था, फिर पढ़ता हूँ और बाद में stty echo(मनुष्य के देखने के द्वारा अधिक पढ़ता हूँ stty- यानी man stty)। यह प्रोग्रामर के दृष्टिकोण से अधिक उपयोगी है क्योंकि आप गूँज बंद कर सकते हैं और फिर एक प्रोग्रामिंग लैंग्वेज जैसे जावा, सी (++), पायथन आदि से पासवर्ड पढ़कर अपने स्टैण्डर्ड स्टैडेन "रीडर्स।"

बाश में, उपयोग इस तरह दिख सकता है:

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

उदाहरण के लिए अजगर, ऐसा दिखेगा:

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)

मुझे पायथन में कई बार ऐसा करना पड़ा, इसलिए मैं इसे उस दृष्टिकोण से बहुत अच्छी तरह से जानता हूं। हालांकि, अन्य भाषाओं में अनुवाद करना बहुत कठिन नहीं है।


-1

आपका प्रश्न एक तरह से "टूल्स की तरह" पढ़ता है ??? " तो मुझे नहीं पता कि यह आपके लिए काम करेगा:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.