SSH出力を別のコマンドにパイプするときは、キーボード対話型認証を使用してください。

SSH出力を別のコマンドにパイプするときは、キーボード対話型認証を使用してください。

sshの出力を別のコマンドにパイプしたいです。たとえば、

ssh myserver cat remote-file | diff local-file -

問題は、myserverがパスワードを要求するためにパスワードを入力できないことです。 (何らかの理由でサーバーは公開鍵認証を使用できません。この設定を変更することはできません)。 sshにパスワードを取得させる方法は?

やりたくないので参考にしてくださいパスワードをSSHにパイプ。 SSH出力をパイプし、通常どおりパスワードを入力しようとしています。

万が一に備えて、私はOS X 10.7(Lion)でbashと標準端末を使用しています。この問題を引き起こす可能性があるエイリアスを設定していません。他の(Linux)システムで同じ問題を見たことがあるので、私の設定に限定された問題ではないと思います。

ベストアンサー1

まあ、これは私のbash構成との奇妙な相互作用によるものであることがわかりました。

.bash_profile現在実行されているコマンドをウィンドウのタイトルまたはscreenタブに配置することがあります。仕組みは以下を使用することですtrap

trap 'bash_current_command' DEBUG

それの前に:

function bash_current_command {
    # only works in bash > 3.1
    #set -- $BASH_COMMAND

    # for old bash
    set -- $(history 1)
    shift

    if [[ "$1" == "sudo" ]]; then
        cmd="*$(basename -- "$2")*"
    else
        cmd="$(basename -- "$1")"
    fi

    bash_set_title "$cmd"
}

bash_set_titleANSIエスケープコードを使用して現在の端末タイトルとアイコンタイトルを設定する小さな機能です。ご覧のとおり、これはサブシェルを作成し、$(...)私の直感はこれが問題かもしれないと言います。実際、この行を変更した後は効果がありました!

なぜこれが起こるのかを知っている人がいる場合は、詳細を聞きたいです。サブシェルは通常入力を盗みますかtty?それともデバッグトラップの問題ですか?stdin一般的な入力/パイプラインコマンドの問題は覚えていません。

(ご覧のように、私の機能にはとにかくいくつかの問題があります。解決策としてサブシェルの1つを使用しているので、古代のbashバージョンで動作します(従来のシステムでは立ち往生していますが、まだ統合構成が必要です))別のサブシェルを使用するすると実際の命令を抽出するのに使われますがsudo、このようなスイッチでsudoを呼び出すと失敗するsudo -H -u user commandので、今回のコードを修正する機会とみます...)

おすすめ記事