質問: Windows10のバッチファイルでUbuntuのリモートサーバーにSSHで繋いだ後、さらにコマンドを入力させることは出来ますでしょうか? 例えば、下記のバッチファイルを実行して、SSHで__HogeというUbnutuのホストに繋ぎ、Ubuntu上で`echo "hello"`のコマンドを実行したいと考えています。 ``` ssh __Hoge echo "hello" ``` 上のバッチファイルを実行してみたところ、コマンドプロンプトが立ち上がってsshで繋ぐところまではうまくいくのですが、`echo "hello"`を入力させることは出来ないようでした。 Windows10のバッチファイルでSSHしてからコマンドを入力させるまでの書き方について、 ご存知の方がいらっしゃいましたら、ご回答のほど何卒宜しくお願いします <ご参考> SSH用のConfigファイル`C:\Users\\.ssh\config` を使って、 コマンドプロンプトからsshコマンドでリモートサーバにアクセスする方法については下記を参照しました。 ~/.ssh/configについて - Qiita 今回使っているconfigの中身は下記の通りです。 ``` ServerAliveInterval 60 Host __Hoge HostName Hoge User tanaka Port 77 PreferredAuthentications publickey IdentityFile /Users/tanaka/.ssh/id_rsa ``` <実行環境> * ローカルPC:Windows10 Pro * リモート先のホストPC:Ubuntu 18.04.3 LTS
回答: > > > ``` > ssh __Hoge > echo "hello" > > ``` > > これでは、sshが終了してからechoを実行することになります。 sshのmanpageには > > ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J destination] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination [command] > > > とあるように、オプションを一通り指定した後に実行したいコマンドを指定します。 ただし、echoというコマンドは存在せず、シェルの内部コマンドとなっています。そこで実行すべきコマンドはシェルであり、シェルに対してechoを渡します。 シェルに何を利用するかは個人の自由ですが例えばbashを使用した場合、最終的には ``` ssh __Hoge bash -c 'echo "hello"' ``` のようになるでしょうか。