SSHでコマンド実行


sshを使えばリモートログイン以外にも、コマンド実行でいろいろなことができます。

例えばこんな環境でやってみます。

WindowsのTera Termを使って「ローカル」に普通にログインしてみます。

「リモート」にもログインしてみます。

今度は「ローカル」から「リモート」にログインしてみます。

この状態で例えば ls /home というコマンド実行すると「ローカル」から「リモート」側のhomeディレクトリのファイル・フォルダーの一覧を見ることができます。


「ログイン」という手続きを省略して、同じコマンドを実行してみます。

その前に、もう一つ手続きを省いてみます。

sshを実行する際にパスワードの入力を要求されますがこの手間を省きます。

sshpassを使います(公開鍵認証はまた別の機会に)。

「ローカル」側で以下を実行。

 

sshでコマンドを実行してみます(コマンド列はクオーテーションで括っても括らなくてもいいようです)。

初回(sshで一度もログインしたことがない端末の場合)は以下で実行

以降は以下でいいです。

これは「ローカル」側から「リモート」側のコマンドを実行して結果を取得できるということです。

 

例えば以下のようなシェルスクリプトを「リモート」側で作っておいて、「ローカル」から引数を渡して実行すれば、「リモート」側にファイルを作ってやることもできます。

シェルスクリプトはフルパスで指定します。

「リモート」側の/home/tileserverに”Hello!”と記述されたdatというファイルが作成されます。scpみたいなものですが手数は少ないです。

 

 

では、「リモート」側にシェルスクリプトが無い場合はどうしましょう。

その場合は、「ローカル」側にシェルスクリプトを作っておいて、「リモート」側のシェルに渡してやることで実行することができます。

こんな感じです。

Bashを使いたければ…..

シェルの標準入出力を使ったものです。

 

これで、「リモート」側の/home/tileserverに”Hello!World!”と記述されたdatというファイルが作成されます。

引数をダブルクオーテーションで囲って渡す場合、感嘆符(!)が末尾以外にある場合はエスケープする必要があります、ご注意ください。

 

また、以下のようなスクリプトの場合

「ローカル」側で「リモート」側のCPU温度を5秒間隔でモニターしてみます。

 

【mon_temp.sh】

bashは整数しか扱えないので面倒ですね。例えば48567という数値を1000で割った48.567という小数点数を表現する場合は工夫が必要です。

またcatをDATに渡しているところで使っているのはバッククォート(バックティック)です、間違えやすいのでご注意ください(Shift + @)。シングルクォートやダブルクオートで囲めば単なる文字列が変数に格納されますが、バッククォートを使うことで、シェルスクリプトの標準出力を変数に格納できます。(DAT=$(cat ……..)の方が推奨されてる?)

実行権を付与しておきます

sudo chmod 777 mon_temp.sh

実行

 

以上


同じユーザー名、IPアドレスで構成した別の端末にSSHでログインしようとするとWARNINGが出て拒否されます。

WARNING:  REMOTE HOST IDENTIFICATION HAS CHANGED!

以前にsshを使った時に作成された公開キーを、以下のコマンドで削除しておく必要があります。

 


SSHで接続して「リモート」側のGUIアプリを開いて実行してみる

このページ参照


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*