WindowsからLinuxサーバー上のファイルを取得する場合、バッチファイルを作成しておくとラクです。
さらに、タスクスケジューラからの定時起動や実行する頻度が高い場合、パスワード入力を省略できたほうが便利です。
この記事ではscpコマンドを公開鍵認証で実行し、実行時にパスワードを入力する必要がないバッチファイルの作成方法を解説します。
実行環境
サーバーの対象ディレクトリにあるすべてのファイルを、Windowsクライアントからバッチファイルで取得します。
- サーバーIPアドレス:192.168.10.10
- サーバーユーザー名:user
- 対象ディレクトリ:/var/log/app
公開鍵認証の準備
公開鍵認証に必要な準備を行います。
鍵の生成
まずは、認証に必要な公開鍵と秘密鍵を生成します。
コマンドプロンプトを開き、「ssh-keygen」を実行します。
「Enter file in which to save the key」で何も入力せず、Enterキーを押します。
すでに鍵ファイルが存在する場合は上書きしてよいか聞かれます。
上書きしてよい場合はyを入力し、Enterキーを押します。
「Enter passphrase」 で何も入力せず、Enterキーを押します。
「Enter same passphrase again」 で何も入力せず、Enterキーを押します。
鍵のペアが生成されました。
「C:¥ユーザー¥(ユーザー名)¥.ssh」を開くと、鍵ファイルが生成されています。
- id_rsa ・・・ 秘密鍵 (Windowsクライアント側で使用する)
- id_rsa.pub ・・・公開鍵 (サーバー側で使用する)
秘密鍵の管理には注意が必要です。
秘密鍵があれば、誰でもパスワード入力なしにサーバーへログイン可能となります。
秘密鍵が不用意に第三者の手に渡らないよう注意しましょう。
公開鍵の登録
Linuxサーバーに公開鍵の登録を行います。
「C:¥ユーザー¥(ユーザー名)¥.ssh」を エクスプローラーで開いた状態で、アドレスバーに「cmd」と入力し、Enterキーを押します。
カレントディレクトリが「C:¥Users¥(ユーザー名)¥.ssh」の状態でコマンドプロンプトが開きます。
Linuxサーバーのホームディレクトリに公開鍵ファイル(id_rsa.pub)をscpコマンドで送信します。
scp -p id_rsa.pub user@192.168.10.10:~
sshコマンドでLinuxサーバーにログインします。
ssh user@192.168.10.10
ホームディレクトリで以下のコマンドを実行します。
cat id_rsa.pub >> ~/.ssh/authorized_keys
「~/.ssh」に「authorized_keys」ファイルが存在しない場合は新規作成、存在する場合は既存ファイルに追記されます。
ホームディレクトリで「ll -a」コマンドを実行し、「.ssh」ディレクトリのパーミッションが「drwx——」であることを確認します。
パーミッションが「drwx——」でない場合は、以下のコマンドを実行します。
chmod 700 .ssh
「.ssh」ディレクトリに移動して「ll」コマンドを実行し、「authorized_keys」のパーミッションが「-rw——-」であることを確認します。
パーミッションが「-rw——-」でない場合は、以下のコマンドを実行します。
chmod 600 authorized_keys
これで公開鍵認証の準備が整いました。
ファイルを取得するバッチファイルの作成例
テキストファイルに以下を張り付け、拡張子「.bat」で保存します。(例:getBackup.bat)
@echo off rem ①格納ディレクトリを指定 set BACKUP=..backup rem ②ディレクトリ作成 cd %~dp0 mkdir %BACKUP% rem ③ファイル取得 scp -i .keyid_rsa -rp user@192.168.10.10:/var/log/app/* %BACKUP% rem ④待機 pause
以下のようなフォルダ構成とします。
getBackup
├─ key
│ └ id_rsa
└─ getBackup.bat
「id_rsa」は「鍵の生成」で生成した秘密鍵ファイルです。
①格納ディレクトリを指定
取得したファイルを格納するディレクトリパスをバッチファイルからの相対パスで指定します。
②ディレクトリ作成
①で指定したディレクトリを作成します。
mkdirコマンドの前に「cd %~dp0」とすることで、バッチファイルを基準とした相対パスでディレクトリが作成されます。
③ファイル取得
ファイルを取得し、②で作成したディレクトリに格納します。
-i オプションの後に、秘密鍵ファイルを相対パスで指定します。
④待機
pauseコマンドで待機し、実行結果を確認します。
バッチファイルをダブルクリックで起動する場合は、pauseコマンドで待機しておかないと自動で終了してしまいます。
実行結果を確認したい場合は、pauseコマンドを入れておきましょう。
実行結果を表示せずに自動終了したい場合は、pauseコマンドを省略します。
バッチファイルの実行イメージ
作成したバッチファイルの実行イメージは以下のようになります。
①作成したバッチファイルをダブルクリックします。
②ファイルが取得されます。
何かキーを押すと画面が終了します。
③getBackupフォルダと同階層にバックアップが取得できました。
まとめ:scpコマンドはパスワード入力を省略できる!
scpコマンド実行時のパスワード入力が不要なバッチファイルの作成方法を解説しました。
公開鍵をサーバーに配置し、scpコマンド実行時にペアとなる秘密鍵と照合することで認証をすることができます。
ただし、秘密鍵の管理には注意が必要です。
秘密鍵があれば、誰でもパスワード入力なしにサーバーへログイン可能となります。
秘密鍵が不用意に第三者の手に渡らないよう注意しましょう。
関連記事
完了メッセージの表示など、全角文字を含む処理をscpコマンド実行後に実行すると文字化けする場合があります。
以下の記事で対処法を紹介しています。
>>バッチファイルでscpコマンド実行後に文字化けする場合の対処法
コメント