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アプリを開いて実行してみる
Leave a Reply