Edited at

SSHでリモートでファイル読み込み/書き出しをしてコマンドを実行する方法

More than 1 year has passed since last update.


概要

SSH接続でリモートからコマンドを実行することもあると思います。その際に接続先または接続元からファイルを読み込んでコマンドを実行したり、コマンドの実行結果を接続先または接続元に書き出すこともあると思います。

そのため、SSH接続でコマンドを実行し、その際にファイルの読み込み・書き出しをする手順をまとめて見ました。

ちなみに、SSH自体は下記の記事が参考になるかと思います

インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識


1. SSH接続してコマンド実行

ssh接続してコマンドを実行する場合は、下記のようになります。

$ ssh username@hostname(IP adress)commmand

例1)

$ ssh hoge@xx.xxx.xxx.xxx echo hello

例2)(公開鍵認証の場合)

$ ssh -i ~/.ssh/hoge_rsa hoge@xx.xxx.xxx.xxx echo hello

以下の2,3が少しひっかかったところです。

先にポイントを書いておくと、クォーテーションの書き方でした。

クォーテーションで括られないコマンドは、コマンド解釈が先に行われます。

接続元ファイルを読み込む際は、クォーテーション外に書く必要がありました。逆に、接続先のファイルを使用する場合は、クォーテーションで囲うことで接続先で初めて解釈されるようにします。


2. SSH接続して接続元のファイルを使用してコマンド実行

例1)

$ ssh hoge@xx.xxx.xxx.xxx sh ./hogehoge.sh 

<でファイル読み込みを明示する形になります。

例2)

$ ssh hoge@xx.xxx.xxx.xxx 'sh' < ./hogehoge.sh 


3. SSH接続して接続先のファイルを使用してコマンド実行

例1)

$ ssh hoge@xx.xxx.xxx.xxx 'sh ./hogehoge.sh '

例2)

$ ssh hoge@xx.xxx.xxx.xxx 'sh < ./hogehoge.sh '


4. SSH接続して実行したコマンドを接続元のファイルに書き出し

上記の応用ですが、SSHでコマンドを実行した結果を接続先/接続元のサーバ内にに書き出す場合は以下になります。

$ ssh hoge@xx.xxx.xxx.xxx 'cat hoge.txt' > hogehoge.txt


5. SSH接続して実行したコマンドを接続先のファイルに書き出し

$ ssh hoge@xx.xxx.xxx.xxx 'cat hoge.txt > hogehoge.txt'

2,3と原理は同じで、接続元のサーバ内のファイルに書き出す場合はクォーテーションから外し、接続先にサーバ内のファイルに書き出す場合はクォーテーション内に含める書き方になります。