/ /ここの文書を端末にエコーしない方法は? - bash、ssh、heredoc、stty

ここに文書を端末にエコーしない方法は? - bash、ssh、heredoc、stty

私は、ユーザーに彼らのためにプロンプ​​トを表示するスクリプトを持っていますsudoのパスワードを入力し、ホストのリストを繰り返して、リモートホストでコマンドを実行します。私は自分のパスワードを静かに得るために "read -s"を行うことができますが、パスワードがリモートホストで使用されるたびに端末にエコーバックします。例:

#!/bin/sh -x

echo "Enter sudo pass:"
read -s SUDOPASS

stty_orig=$(stty -g)
stty -echo
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP
$SUDOPASS
EOP
stty $stty_orig

出力にはまだパスワードが含まれています:

+ ssh -tt remote_host sudo cat /etc/cma.conf
My_P4ssW0rd!
Password:
<?xml version="1.0" encoding="utf-8"?>
...

また、リモートホスト上でsttyと遊ぶのにも役立ちません:

stty_orig=$(ssh -t remote_host stty -g)
ssh -t remote_host stty -echo
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP
$SUDOPASS
EOP
ssh -t remote_host stty $stty_orig

FWIW、私は主にOSXのbash / shに関する

回答:

回答№1は1

試す expect

#!/bin/sh

echo "Enter sudo pass:"
read -s SUDOPASS

expect -c "spawn ssh -tt remote_host sudo cat /etc/cma.conf ; expect -re "\[sudo\] password for .*:"; send """$SUDOPASS""n";interact"

回答№2の場合は0

正直言って、私はここで問題を見つけられませんでしたが、出力を手動でリダイレクトして静かにすることがよくあります。

ssh -tt remote_host sudo cat /etc/cma.conf <<EOP >& /dev/null

これが助けになるかどうかわかりません。