Project

General

Profile

SSHでリモート先にコマンドを実行させる方法

SSHでリモート先に特定のコマンドを実行させる。

コマンドはセミコロン区切りで複数記入できる。
  • コマンド内容
    echo "コマンド1;コマンド2;……" |ssh ユーザ名@ホスト名 /bin/bash
    

前提条件

スクリプトに組み込む場合には、ssh鍵交換を行ってパスワード入力を
求められないようにしておくこと。

  • リモート元のサーバで次のコマンドを実行
    パスワードは入力しない
    ssh-keygen -t rsa
    
  • 公開鍵をリモート先のサーバに送る
    scp /root/.ssh/id_rsa.pub root@リモート先のIP:/root
    
  • リモート先のサーバで次のコマンドを実行
    cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
    rm /root/id_rsa.pub
    chmod 700 /root/.ssh/
    chmod 600 /root/.ssh/authorized_keys
    
以上でパスなしでのssh経由でのコマンド実行ができる。
  • リモート元で次のコマンドを実行し確認
    ssh root@リモート先
    

補足

デフォルト名以外のユーザ名や鍵、ポート番号を指定する場合、リモート元の次のファイルに設定を記入する。

スクリプトでsshコマンドのオプションをすべて指定しているが、途中で仕様変更でポートが変わるとか
鍵ファイルがデフォルト名ではないから別途指定しないといけないとか、そういうときに便利。

* リモート元のssh設定ファイルを変更
<pre>
.ssh/config
--------------------
Host 任意の接続名(ホスト名でなくてもよい)
    HostName     リモート先ホスト名
    user         root
    Port         22
    IdentityFile ~/.ssh/id_rsa
</pre>
* 次の接続名でログインができるようになる
<pre>
ssh 接続名
</pre>