Windows10のバッチファイルで、SSHクライアントを起動させてからコマンドを入力させる方法

投稿者: Anonymous

Windows10のバッチファイルでUbuntuのリモートサーバーにSSHで繋いだ後、さらにコマンドを入力させることは出来ますでしょうか?

例えば、下記のバッチファイルを実行して、SSHで__HogeというUbnutuのホストに繋ぎ、Ubuntu上でecho "hello"のコマンドを実行したいと考えています。

ssh __Hoge
echo "hello"

上のバッチファイルを実行してみたところ、コマンドプロンプトが立ち上がってsshで繋ぐところまではうまくいくのですが、echo "hello"を入力させることは出来ないようでした。
Windows10のバッチファイルでSSHしてからコマンドを入力させるまでの書き方について、
ご存知の方がいらっしゃいましたら、ご回答のほど何卒宜しくお願いします

<ご参考>
SSH用のConfigファイルC:Users<user_name>.sshconfig を使って、 
コマンドプロンプトから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"'

のようになるでしょうか。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *