私はいくつかのシェルで作業しており、次の行を見つけました。
cat /ssh/sshkey | tr -d '\r' | ssh-add -
このコードはキーを取得し、エージェントに追加します。これは現在の環境ではうまく機能しますが、別の仮想マシンで試してみると、次のような結果が得られます。Error loading key "(stdin)": invalid format
ssh-addはパスワードを含むプロンプトを期待しますが、これがこのエラーの原因だと思います。ただし、これはスクリプトにあるため、パスワードなしで機能する必要があります。
私は何を見逃していますか?
答え1
これは簡単です。 ssh-addは入力されたパスワードのエコーを無効にする必要があるため、単にリダイレクトできないため、stdinの代わりに/ dev / ttyを使用します。
実際、マニュアルページには次のように記載されています。
ファイルにパスワードが必要な場合、ssh-add はユーザーにパスワードの入力を求めます。パスワードはユーザーのttyから読み取られます。
したがって、ptyに接続されているssh-addを実行する必要があります。それ以外の場合は、SSH_ASKPASSを使用して暗黙のハッキングを考案できます(推奨しません)。 Expect(1)(仕様の巨大さ)またはpdipと同じくらい簡単です。 zshにはzptyというモジュールがあり、おそらくbashにも同様のものがあるかもしれません。