はじめに
シェルスクリプトでSSHして、複数のクライアントにはいり、SQLiteにselect文を発行して、結果を取得する。ということをやった時にトラブったのでメモ書き。(超初心者向け)
なぜシェルスクリプトか?
ネットにつながっていない環境でしたので、ライブラリを追加することはできませんでした。(というかできるならpythonあたりでやりたかった。)
トラブル1
ループでSSHをで入ることを考えたが、一つ目に入ると、シェルが終了する。
トラブル1原因
シェルでSSHすると、コンソールがSSHで入った先に移るため、SSHさきでexitすると、シェル自体が終了してしまっていた。
トラブル1解決法
sshで起動するときに、-n オプションを入れ、コンソールを渡さないようする。
また、同一シェル内でSSHすると、解消しなかったため、メイン、サブ構成にして、サブ側でSSH入るようにした。
トラブル2
SSHで入る際にパスワードを渡す方法。
トラブル2原因
まあ、推し量って下さい・・・
トラブル2解決法
@wadahiro様の記事を参考にさせていただきました。
なお、chmodで実行権を与えてください。
直接起動しないとうまく動きません。
トラブル3
初めてつなぐクライアントでフィンガープリントが表示される。
トラブル2解消後であったため、yes/noが入力できず、無限ループになる。
トラブル3原因
・・・・そういうもんですよね。
トラブル3解決法
SSHのオプションに -o ”StrictHostKeyChecking no" を入れる。
トラブル4
SSHで入った後、SQLiteでselectする際、select付近にエラーがある旨のメッセージが出力される。
user@mac:~/documents $ ssh user@192.168.1.xxx sqlite3 db.sqlite3 "select * from test"
user@192.168.1.xxx's password:
Error: near "select": syntax error
トラブル4原因
一度SSHで入ってからsqlite3 db.sqlite3 "select ・・・”すると、当然ですが成功します。
トラブル4解決法
コマンド部分を''で囲む。
ssh user@192.168.1.xxx 'sqlite3 db.sqlite3 "select * from test"'
で解決。
というわけで自分メモ。