Windowsのバッチで、ssh接続した後にコマンドを入力したい。


WindowsからLinuxサーバーへssh接続した後に、コマンド実行するバッチを作成したいです。

通常、sshコマンドで接続して-cオプションで、コマンドを実行する認識です。

今回は、Linuxでシェルを実行するのですが、シェル内に「read -p」で手入力の値を使用します。

-cオプションで、コマンドを実行した場合、1行でssh接続が完結してしまい、応答入力が出来ないです。  
ssh接続後に、応答入力する方法はありますか？

また、応答入力した値を元にファイル取得するバッチにしたいです。

何か方法があれば教えてほしいです。

〈シェルスクリプト例〉

read -p "取得年月を入力 (例：2022 11)" DATA1 DATA2

**省略**  
SQL文で、CSV出力してファイル名にDATA1 DATA2を使用。




質問投稿者です。

今回やりたかったことをざっくりと話すと、  
シェルスクリプトで、データベースからCSVファイルを抽出して、LinuxサーバーからWindowsサーバに転送することでした。

いろいろと制限があり、  
WindowsからLinuxサーバーへssh接続した後に、コマンド実行したいと考えていましたが、  
シェルスクリプト実行時に、会話形式で取得した値（変数）をファイル名で使用するなどの観点から、  
あまり現実的ではないのかなという結論に至り、そもそものやり方を変えることにしました。

Windowsのバッチで、  
Teratermマクロを使用してシェルスクリプトを実行させCSVを出力した後に、  
Windows側からLinux上にあるファイルを取りに行くようにしました。

回答・コメントいただいた方、ありがとうございました。




Windows側は標準のopensshを使うとして、Linux側は$HOMEに以下のhoge.shがあるとします。中身は以下のようにbashのread内部コマンドを使用しています。

[code]

    #!/bin/bash
    read -p "input: " HOGE
    echo "${HOGE}" | bc
    
[/code]

Linuxにログインしてる場合は、このスクリプトが以下のように実行できるとします。

[code]

    $ cd $HOME
    $ ./hoge.sh
    input: 
    
[/code]

さらに端末から1+2[Enter]と入力すると以下のように計算結果が出力されるとします。

[code]

    $ ./hoge.sh
    input: 1+2
    3
    $
    
[/code]

また、Windowsからは以下のコマンドでパスワード入力なしにログインできる(パスフレーズなしの公開鍵認証)とします。

[code]

    C:\Users\user>ssh ホスト名
    Last login: Sat Nov  5 09:07:15 2022 from 10.0.2.2
    user@user-pc:~$ exit
    ログアウト
    Connection to ホスト名 closed.
    
    C:\Users\user>
    
[/code]

ここで、bashのread内部コマンド用に入力用テキストファイルhoge.txtをWindows側に用意します。中身は以下のとおりです。

[code]

    1+2
    
[/code]

これで実行条件が整いました。

Linuxでバッチ実行させるには以下のようにしてください。

[code]

    C:\Users\user>type hoge.txt | ssh ホスト名 "bash hoge.sh"
    3
    
    C:\Users\user>
    
[/code]

"bash hoge.sh"は"./hoge.sh"でも構いません。

