実験的にunzip
ZIPファイルを私のサーバーにパイプするスクリプトを書いてみましたssh
。しかし、SSHキーが設定されておらず、パスワードの入力を求められたらどうなりますか?私はまだZIPファイルではなくZIPファイルから来たいです。その後、接続が確立されたら、stdin
ZIPファイルをパイプで接続したいと思います(おそらく2つの別々の入力パイプを使用して、1つはSSHパスワード用、もう1つは実行用ですか?)。unzip
unzip
ssh
/tmp
また、私は現在サーバーに書き込んでいますが、私のサーバーではそうではないようですunzip
。セッション内でパイプすると動作し、私のコンピュータからパイプすると動作しますが、私のコンピュータから。/dev/stdin
/dev/stdin
ssh
ssh
答え1
関係のない2つの質問があるようです。
- プログラム的に
ssh
。
コメントですでに指摘したようにssh
、いいえ標準入力(パイプ)からパスワードを読みます。ターミナルから直接。したがって、ssh
パスワードをパイプすることはできませんが、sshpass
ツールを使用して次のようにこれを実行できます(インストールする必要があります)。
sshpass -p 'password' ssh user@host
あるいは、コマンドラインに直接提供するのではなく、ファイルからパスワードを読み取ることもできます。
sshpass -f passwordfile.txt ssh user@host
plink
(私はこれをテストしていません)次のコマンドを使用することもできますLinux用PuTTY変えるssh
。plink
パスワードを引数として受け入れます。
plink -pw 'password' user@host
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
場合離れてローカルコンピュータではないコンピュータ(引用符を省略すると、ファイルはローカルコンピュータに作成されます)。