SSH経由でコマンドを実行する  

あまり使う機会はないかもしれませんが、SSH経由でコマンドを実行するためのメモ。

コマンドを実行する  

通常sshでログインする際には、

% ssh dobuo@foo

という感じで使用すると思いますが、その後ろにコマンドを続けることでリモートサーバでコマンドラインを実行することができます。もちろんユーザー名が同じなら@以前(dobuo@)を省略できます。

% ssh dobuo@foo date
dobuo@foo's password:
2011年  6月  7日 火曜日 09:52:38 JST

こんな感じ。リダイレクトでローカルファイルに出力することも可能です。

% ssh dobuo@foo date > date.txt

でdate.txtに書き込まれます。

ローカルファイルのリダイレクト  

コマンドを実行できるのであればリダイレクトを使いたいこともあると思います。
ここではローカルのlocal.txtをリダイレクトしてリモートのremote.txtに書き出すことをしてみます。

% ssh dobuo@foo 'cat > remote.txt' < local.txt

ポイントはcatからのリダイレクト文をクォートで囲むこと。これをしないと結局ローカルのファイルにリダイレクトされてしまいます。この例の場合、cat > remote.txtがリモートのコマンドラインで実行されます。

応用例:id_rsa.pubをauthorized_keysに追加  

SSHで公開鍵認証をするときに公開鍵id_rsa.pubをauthorized_keysに追加しますが、これも上記の方法で行うことができます。

% ssh dobuo@foo 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub

これでリモートの.ssh/authorized_keysに公開鍵が追加されました。リモートでのリダイレクト>>を間違えないようにしましょう。
なお、.ssh/authorized_keysのファイルパーミッションは600にしておきます。新規作成の場合は注意。

SSHのid_rsa.pubをOpenSSLのキーから作成する  

% ssh-keygen -y -f newkey.pem

で作成される