パスワード入力を省略して SCP コマンドを実行する
背景
簡易的なバックアップのために、定期的にファイルのコピーを行うことになりました。
ある Linux マシンから別の Linux マシンにファイルコピーを行う環境なので、
- 定期的な実行 -> cron
- ファイルコピー -> scp
をそれぞれ使うことにしました。
通常 scp はパスワードの入力が求められます。
そのため cron やシェルスクリプトでそのまま扱いにくいです。
そこで、SSH key を使ってパスワード入力を省略することにしました。
SSH key の生成
scp を実行するマシンを A (ユーザa)、コピー先のマシンを B (ユーザb) とします。
A で以下のコマンドを実行します。
a@A$ ssh-keygen -t rsa
こうすると暗号鍵の保存場所やパスフレーズなどが聞かれます。
パスフレーズは入力しないで Enter します。
すると、~/.ssh/id_rsa (private key) と ~/.ssh/id_rsa.pub (public key) が生成されます。
SSH public key を B に追加
生成した SSH public key を B に追加します。
まず B にユーザ b としてログインし、.ssh ディレクトリを作成します。
すでに .ssh ディレクトリがある場合は飛ばして大丈夫です。
a@A$ ssh b@B mkdir -p .ssh
次に、A の public key を B の authorized_keys に追記します。
a@A$ cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
これで準備が整いました。
scp する
scp -i を使うと、パスワード入力を求められずに scp できます。
a@A$ scp -i ~/.ssh/id_rsa ~/file_to_send.txt b@B:/path/to/