必要に応じてSSHパスワードの入力を求められ、SSHセッションに接続します。

必要に応じてSSHパスワードの入力を求められ、SSHセッションに接続します。

実験的にunzipZIPファイルを私のサーバーにパイプするスクリプトを書いてみましたssh。しかし、SSHキーが設定されておらず、パスワードの入力を求められたらどうなりますか?私はまだZIPファイルではなくZIPファイルから来たいです。その後、接続が確立されたら、stdinZIPファイルをパイプで接続したいと思います(おそらく2つの別々の入力パイプを使用して、1つはSSHパスワード用、もう1つは実行用ですか?)。unzipunzipssh

/tmpまた、私は現在サーバーに書き込んでいますが、私のサーバーではそうではないようですunzip。セッション内でパイプすると動作し、私のコンピュータからパイプすると動作しますが、私のコンピュータから。/dev/stdin/dev/stdinsshssh

答え1

関係のない2つの質問があるようです。

  1. プログラム的にssh

コメントですでに指摘したようにsshいいえ標準入力(パイプ)からパスワードを読みます。ターミナルから直接。したがって、sshパスワードをパイプすることはできませんが、sshpassツールを使用して次のようにこれを実行できます(インストールする必要があります)。

sshpass -p 'password' ssh user@host

あるいは、コマンドラインに直接提供するのではなく、ファイルからパスワードを読み取ることもできます。

sshpass -f passwordfile.txt ssh user@host

plink(私はこれをテストしていません)次のコマンドを使用することもできますLinux用PuTTY変えるsshplinkパスワードを引数として受け入れます。

plink -pw 'password' user@host
  1. unzip標準入力の入力を許可しません。

表示されたテキストによると、unzip -hh標準unzip入力からzipファイルを読むことはまったくサポートされていません。 stdinを介して提供されるファイルを解凍するには、funzip次のようにこのユーティリティを使用する必要があります。

cat file.zip | funzip >file.out

または

funzip <file.zip >file.out

funzipただし、zipファイルでは最初のファイルのみが抽出されることに注意してください。

したがって、これら2つを組み合わせるには、次のコマンドを使用する必要があります。

cat file.zip | sshpass -p 'password' ssh user@host "funzip >file.out"

または

sshpass -p 'password' ssh user@host "funzip >file.out" <file.zip

コマンドをfunzip >file.out引用符で囲むfile.out場合離れてローカルコンピュータではないコンピュータ(引用符を省略すると、ファイルはローカルコンピュータに作成されます)。

関連情報