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
で作成される