2017-08-07 5 views
0

JenkinsのパイプラインでNode.jsスクリプトを起動し、ユーザー名とパスワードをコマンドライン引数として渡したときに、この機能に気付きました。ユーザ名は、正しくパスワードのログ文を印刷しなったが、しかしNode.js:スクリプトのconsole.logステートメントでコマンドライン引数をマスクする方法はありますか?

console.log('username', process.argv[2]); 
console.log('password', process.argv[3]); 

スクリプトは、このように呼ばれていました:スクリプト内

node myScript.js $CREDENTIALS_USR $CREDENTIALS_PSW 

、ログステートメント次があ​​りましたちょうど***と表示されました。コンソールログにパスワードを表示したくないため、これは非常に便利でした。しかし、私はそれがどのように達成されたのか分からなかった。実際にログをとった場合

console.log('password length', process.argv[3].length); 

パスワードが正しく渡されるように、実際のパスワードの正しい長さが表示されています。マスクされた値として表示されているだけです。コンソールログステートメントからコマンドライン引数を隠すために、このタイプの設定をどこで設定できますか?

$CREDENTIALS_USRの値がmandeepあると$CREDENTIALS_PSWの値が123456を言うと、彼らは両方のジェンキンスの資格情報ストアからロードされ、スクリプト内の次のステートメントを出力し、それらに隣接して書かれていますであれば、あなたの例を与えることコメント:

console.log('username', process.argv[2]); // this will print mandeep 
console.log('password', process.argv[3]); // this will print *** (only 3 stars irrespective of actual length of process.argv[3] 
console.log('password length', process.argv[3].length); // this will print 6 because the password was 123456 

答えて

1

ノードは、スクリプト引数の自動/暗黙のマスキングを実行しません。ほとんどのJenkinsは、スクリプトの第2引数としてリテラル文字列 '***'を渡します。

+0

2番目の引数を '123456'として渡し、スクリプトのこの引数の長さをチェックすると正しい長さが6になります。しかし、この引数をログに記録すると' *** 'だけが表示されます。だから、ジェンキンスは間違いなく、スクリプトがパスワードを読んだり表示したりすることを可能にするいくつかの追加情報を渡しています –

+0

スクリプトがパスワードのマスクされていないバージョンを受け取ったことをどうやって知っていますか? Jenkinsがパスワードの隠しバージョンを渡している場合、長さは一致するので、これは正確な証拠ではありません。 – mscdex

+0

しかし、文字列 ''***''をどのように渡していると言えますか?その場合、長さは3になるはずです。私が間違っていれば、私を訂正してください。私が理解したいのは、引数をnode.jsスクリプトに渡すためのメカニズムです。 –

関連する問題