パスワード入力を省略してscpコマンドを実行するバッチファイルの作成手順

パスワード入力を省略してcspコマンドを実行するバッチファイルの作成手順

 

WindowsからLinuxサーバー上のファイルを取得する場合、バッチファイルを作成しておくとラクです。

さらに、タスクスケジューラからの定時起動や実行する頻度が高い場合、パスワード入力を省略できたほうが便利です。

この記事ではscpコマンドを公開鍵認証で実行し、実行時パスワードを入力する必要がないバッチファイルの作成方法を解説します。

 

スポンサーリンク

実行環境

実行環境

サーバーの対象ディレクトリにあるすべてのファイルを、Windowsクライアントからバッチファイルで取得します。

  • サーバーIPアドレス:192.168.10.10
  • サーバーユーザー名:user
  • 対象ディレクトリ:/var/log/app

 

スポンサーリンク

公開鍵認証の準備

公開鍵認証の準備

公開鍵認証に必要な準備を行います。

鍵の生成

まずは、認証に必要な公開鍵と秘密鍵を生成します。

コマンドプロンプトを開き、「ssh-keygen」を実行します。

「ssh-keygen」と入力されたコマンドプロンプト

 

「Enter file in which to save the key」で何も入力せず、Enterキーを押します。

「Enter file in which to save the key」と表示されたコマンドプロンプト

 

すでに鍵ファイルが存在する場合は上書きしてよいか聞かれます。

上書きしてよい場合はyを入力し、Enterキーを押します。

上書き確認が表示されたコマンドプロンプト

 

「Enter passphrase」 で何も入力せず、Enterキーを押します。

「Enter passphrase」と表示されたコマンドプロンプト

 

「Enter same passphrase again」 で何も入力せず、Enterキーを押します。

「Enter same passphrase again:」と表示されたコマンドプロンプト

 

鍵のペアが生成されました。

鍵ペアが生成された後のコマンドプロンプト

 

C:¥ユーザー¥(ユーザー名)¥.ssh」を開くと、鍵ファイルが生成されています。

  • id_rsa ・・・ 秘密鍵 (Windowsクライアント側で使用する)
  • id_rsa.pub ・・・公開鍵 (サーバー側で使用する)
鍵ペアが生成された後の.sshフォルダ

 

秘密鍵の管理には注意が必要です。

秘密鍵があれば、誰でもパスワード入力なしにサーバーへログイン可能となります。

秘密鍵が不用意に第三者の手に渡らないよう注意しましょう。

公開鍵の登録

Linuxサーバーに公開鍵の登録を行います。

C:¥ユーザー¥(ユーザー名)¥.ssh」を エクスプローラーで開いた状態で、アドレスバーに「cmd」と入力し、Enterキーを押します。

アドレスバーに「cmd」と入力された.sshフォルダ

 

カレントディレクトリが「C:¥Users¥(ユーザー名)¥.ssh」の状態でコマンドプロンプトが開きます。

カレントディレクトリが「C:\Users\user\.ssh」のコマンドプロンプト

 

Linuxサーバーのホームディレクトリに公開鍵ファイル(id_rsa.pub)をscpコマンドで送信します。

scp -p id_rsa.pub user@192.168.10.10:~

 

「scp -p id_rsa.pub user@192.168.10.10:」が入力されたコマンドプロンプト

 

sshコマンドでLinuxサーバーにログインします。

ssh user@192.168.10.10

 

「ssh user@192.168.10.10」が入力されたコマンドプロンプト

 

ホームディレクトリで以下のコマンドを実行します。

cat id_rsa.pub >> ~/.ssh/authorized_keys

 

「~/.ssh」に「authorized_keys」ファイルが存在しない場合は新規作成、存在する場合は既存ファイルに追記されます。

「cat id_rsa.pub >> ~/.ssh/authorized_keys」が入力されたコマンドプロンプト

 

ホームディレクトリで「ll -a」コマンドを実行し、「.ssh」ディレクトリのパーミッションが「drwx——」であることを確認します。

パーミッションが「drwx——」でない場合は、以下のコマンドを実行します。

chmod 700 .ssh

 

.sshのパーミッションが「drwx------」と表示されたコマンドプロンプト

 

「.ssh」ディレクトリに移動して「ll」コマンドを実行し、「authorized_keys」のパーミッションが「-rw——-」であることを確認します。

パーミッションが「-rw——-」でない場合は、以下のコマンドを実行します。

chmod 600 authorized_keys

 

authorized_keysのパーミッションが「-rw-------」と表示されたコマンドプロンプト

 

これで公開鍵認証の準備が整いました。

 

スポンサーリンク

ファイルを取得するバッチファイルの作成例

ファイルを取得するバッチファイルの作成例

テキストファイルに以下を張り付け、拡張子「.bat」で保存します。(例:getBackup.bat)

@echo off
rem ①格納ディレクトリを指定
set BACKUP=..\backup

rem ②ディレクトリ作成
cd %~dp0
mkdir %BACKUP%

rem ③ファイル取得
scp -i .\key\id_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.batが格納されたフォルダ

 

②ファイルが取得されます。

何かキーを押すと画面が終了します。

ファイルの取得が完了したコマンドプロンプト

 

③getBackupフォルダと同階層にバックアップが取得できました。

backupフォルダとgetBackupフォルダ

 

スポンサーリンク

まとめ:scpコマンドはパスワード入力を省略できる!

scpコマンドはパスワード入力を省略できる!

scpコマンド実行時のパスワード入力が不要なバッチファイルの作成方法を解説しました。

公開鍵をサーバーに配置し、scpコマンド実行時にペアとなる秘密鍵と照合することで認証をすることができます。

ただし、秘密鍵の管理には注意が必要です。

秘密鍵があれば、誰でもパスワード入力なしにサーバーへログイン可能となります。

秘密鍵が不用意に第三者の手に渡らないよう注意しましょう。

 

おすすめ本

コマンドプロンプトで実行可能なコマンド集です。

パラパラ眺めると、「こんなこともコマンドでできるのか!」と新たな発見があります。

手元に置いておけばバッチファイル作成が捗ります!

 

関連記事

完了メッセージの表示など、全角文字を含む処理をscpコマンド実行後に実行すると文字化けする場合があります。

以下の記事で対処法を紹介しています。

>>バッチファイルでscpコマンド実行後に文字化けする場合の対処法

 

コメント