39663


SSHで接続を行い、接続先でコマンド実行した結果「のみ」を受け取りたいです。

具体的には接続先でpsqlを使用してSQLを発行した結果を受け取りたいと考えています。  
（直接psqlで接続することはできない前提になります。）  
以下の通り、expectを使用して実現はできましたが、SSHのコマンドなども入ってしまっております。  
欲しいのはpsqlの結果のみなので、SSHで繋いだ先で標準出力に出力されたメッセージのみを受け取りたいです。（下記のコードですとresultに設定したい）

[code]

    #!/bin/sh
    
    PGPASS="passwod"
    
    SQL="select col1 from hoge limit 1;"
    PSQL="psql -h hostname -p 1234 -U admin -c '${SQL}' database"
    
    COMMAND="export PGPASSWORD=${PGPASS}"
    COMMAND="${COMMAND};${PSQL}"
    
    result=`expect -c "
      spawn /usr/bin/ssh user@host -i /key.ppk \"${COMMAND}\"
      expect \"Enter passphrase for key*\"
      send \"password\n\"
      interact;"`
    
    echo ${result}
    
[/code]

環境は「Ubuntu（Bash on Ubuntu on Windows）」になります。  
また、シェルにこだわっている訳ではありませんので、他の言語やツールなどがありましたらご紹介頂ければと思います。


CC BY-SA 3.0
2017-11-16T08:43:21.140
39618
2017-11-18T13:16:42.673
2017-11-18T13:16:42.673
19110
13022
question
ssh wsl expect
sshで繋いだ先でコマンド発行し、その出力を受け取りたい


受け取った出力から不要な行を削除するのが良いと思います。

今回のケースでは、

[code]

    $ /bin/sh script.sh
    spawn /usr/bin/ssh user@host -i /key.ppk [command]
    Enter passphrase for key '/key.ppk':
    [result]
    
[/code]

最初の2行が不要なので、`tail`等のコマンドで最初の2行を取り除けば所望の結果が得られると思います。


CC BY-SA 3.0
2017-11-17T17:17:02.043
39663
2017-11-17T17:17:02.043
26246
39618
answer