子育てしながらエンジニアしたい

現在 7 歳 女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

パスワード入力を省略して 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/