2025-02-10

ssh 接続先サーバーでコマンドを実行させるクライアント側の ssh 接続の仕方と、ファイル転送

 

【ssh サーバー/クライアント間ファイル転送】記事後半に記載

 

 

ssh クライアントが接続時に「おまじない」をして接続すると接続した ssh サーバーのコマンドを実行できます。

 

 

次に示すのは OPPO Reno11 A の画面コピーです。

 




 

 

【解説】

 

1.Termux 開始後に、最初に "env|grep SSH" としていますが、まだ SSH 接続していないので結果は何も表示されません

 

2.$cmd 変数には " ps;" を設定しています

      これは ssh 接続したときに ssh サーバーで実行するコマンドです

 

3.ssh 接続します

      ssh -t se3 "cmd=$cmd ash" で ssh 接続します

 

      接続先の se3 は iPhone SE3 の iSH に設定の ssh サーバーです

      .ssh/config に次のような設定をすると HOST 名でアクセスできます

         HOST se3 # ホスト名
            HostName 192.168.xxx.yyy # ssh サーバーアドレス
            User root
            Port nnnn


      -t オプションで仮想端末を強制的に割り当てます

 

      "cmd=$cmd ash" はサーバーで実行するコマンドです

      ash はサーバーを close させないためです

      ” ps; ash" と記述しても同じ結果になります

 

4.サーバーでは ls コマンドが自動的に実行されてプロセス状態表示されます

 

5."env|grep SSH" を実行し、結果が返ってきていますので、サーバー側にいることがわかります

 

6.サーバー上で /usr ディレクトリに移動します

 

7.サーバー上で ls コマンドを実行します

      /usr ディレクトリ内のファイル一覧が表示されています

 

 

 

以上のように、サーバーに接続して実行するコマンド(群)やシェルを指定して ssh 接続時に自動実行させることができます。

 

本事例では " ps;" でしたが、" ps; cd /usr; ls;" として一連のコマンド群を順に実行させることができます。

 

 

参考にしたのは下記サイトです。

 

https://qiita.com/ktooi/items/d93778fbc0a60910fbb7

 

 

 

 

 

【ssh サーバー/クライアント間ファイル転送】

サーバーとクライアント間でファイルやフォルダを転送するには次のようにします。

 
■ クライアント側(ローカル側)からリモート側(ssh サーバー側)へ転送

ssh -p [nnnn] [<user][address] 'cat > /[dir]/[file1]' < [file2]

 

   [nnnn]         :ポート番号

   [user]          :ユーザー名

   [address]     :IP アドレス

   [dir]             :リモート側ディレクトリ

   [file1]           :リモート側に保存するファイル名

   [file2]           :ローカル側の現ディレクトリのファイル名

 

例:ssh se3 'cat > /usr/test-file' < test.txt

 

 

■ リモート側からローカル側へ転送の場合

ssh -p [nnnn] [user][address] cat /[dir]/[file3] > [file4]

 

   [file3]           :リモート側から転送するファイル名

   [file4]           :ローカル側の現ディレクトリに保存するファイル名

 

例:ssh se3 cat /usr/test.txt > test.tmp

 

ーーーーーーーーーーーーーーーーーーーー

 

 

 

下図は OPPO Reno11 A の Termux 画面です。

 



 

次図は sshd サーバーである iPhone SE3 の iSH 画面です。

 


 

 

① はローカル(OPPO 側)からサーバー(iPhone)に送る test.txt の中身です

    最終行の日時を確認ください

 

② これをサーバーに送る ssh コマンドですが、受け取ったサーバーでは
    test-file というファイル名で /usr 配下に書き込みます

    ⑤ が受け取ったファイル test-file の中身です

    転送したファイルと同じ日時になっているのが確認できます

 

③ サーバー側の test.txt は ⑥ のよう中身で、これをローカル側に転送し、
    ローカル側では test.tmp として保存します

 

④ ローカル側に保存した test.tmp の中身を表示したもので、⑥ の内容と同じ
    であることを確認できます

 

 

 

 

ssh コマンドのオペランドの内容はサーバー側で接続後に実行するコマンドです。

 

「<」や「>」を含む場合は「”」か「’」で囲みます。

    

 

ssh コマンドは実行後サーバーからは exit します。 

 

サーバーから抜けることで、結果をローカルのファイルとして保存できます。

 

 

以下のようにしても同じ結果が得られます。

 

■ クライアント側(ローカル側)からリモート側(ssh サーバー側)へ転送 

 

下記の ① と ② は同じことです。

 

① ssh se3 'cat > /usr/test-file' < test.txt 

② ssh se3 dd of=/usr/test-file < test.txt 

 

 

リモート側(ssh サーバー側)からクライアント側(ローカル側)へ転送 

 

下記の ③ と ④ は同じことです。

 

ssh se3 cat /usr/test.txt > test.tmp

④ ssh se3 dd if=/usr/test.txt > test.tmp 

 

 

 

 

 

 

 


0 件のコメント: