2

ユーザーにsudoパスワードの入力を求め、ホストのリストを繰り返し処理してリモートホストでコマンドを実行するスクリプトがあります。「-s」を読み取ってパスワードをサイレントに取得できますが、パスワードがリモートホストで使用されるたびに、端末にエコーバックされます。ローカル ホストで stty を変更しても役に立ちません。例:

#!/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に関心があります

4

2 に答える 2

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'
于 2013-07-02T15:43:05.267 に答える
0

正直なところ、私はここで問題を発見していません。しかし、出力を手動でリダイレクトして無音にすることがよくあります。

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

これが役立つかどうかはわかりません。

于 2013-07-02T21:45:47.743 に答える