SCP(Secure Copy)のRedhat Linuxにおける設定をまとめました。公開鍵方式でのコピー設定方法および技術メモを残します。。
まとめ
・例えばRHEL 6.4ではデフォルトではSSHは「パスワード認証は有効」「公開鍵認証は無効」となっている。
この場合、sshやscpでログオンする場合はユーザ名とパスワードの入力が必要となる。公開鍵の登録は不要。
・公開鍵認証を有効にしパスワード認証を無効にすれば、パスワード入力なしの公開鍵認証が可能。
ただしsshクライアント側の秘密鍵にパスフレーズ(パスワードではない)が設定されている場合は接続ごとにパスフレーズの要求が行われる。
・ssh-keygenで秘密鍵生成時にパスフレーズを空にすれば、scpコマンド時にパスフレーズの入力も要求されない。
よってバッチ処理などが可能となる。
スポンサード リンク
1.パスワード認証と公開鍵認証の両方が有効な場合
パスワード認証と公開鍵認証の両方が有効な場合は、以下の通り
●公開鍵が正常に登録されていればパスワード入力不要で通信が可能。
●公開鍵が登録されれいない、あるいは不備がある場合はパスワード入力が求められ、正しいパスワードの場合は通信が可能。
2.サーバの公開鍵
●サーバ認証に関しては事前に登録しておくか、初回接続時にダウンロードするかの方法などがある。
初回接続時は「RSA key fingerprint」が表示される。他の手段で知らされている(郵送や電話など)のfingerprintの値を比較し接続しようとしているsshサーバが成りすましでないことを確認する。
●「fingerprint」の確認時に「Are you sure you want to continue connecting (yes/no)?」でyesを選択するとsshサーバの公開鍵を受け入れることとなる。
3.秘密鍵
●秘密鍵(例:id_rsa)は絶対に盗難されてはだめ。さらにパスフレーズが突破される(あるいはパスフレーズを設定していない場合)と簡単に不正にアクセスが可能となる。
4.認証の仕組み
環境: [scp送信元,サーバAとする。 RHEL 6.4] ユーザの秘密鍵を保管 [scp送信先,サーバBとする。RHEL 6.4] ユーザの公開鍵を登録 @サーバAからサーバBへユーザ名を送信 AサーバBは事前登録されたユーザ名の公開鍵でメッセージを暗号化しサーバAに送信 BサーバAは秘密鍵で複合し、そのハッシュ値をサーバBへ送信。 CサーバBがハッシュ値をチェック。正しければ事前登録されたユーザであることを認める。 |
スポンサード リンク
5.実機検証
(1)検証用のユーザを作成する
#useradd -m testuser
(-mはホームディレクトリを作成するオプション)
(2)以下の通りホームディレクトリが作成されている。
drwx------ 4 testuser testuser 4096 2月 25 11:21 2016 /home/testuser/
(3)ユーザ用の秘密鍵を生成する
2016年現在ではRSA 2048ビットは安全なので、このオプションで作成する。
$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/testuser/.ssh/id_rsa):
Created directory '/home/testuser/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/testuser/.ssh/id_rsa.
Your public key has been saved in /home/testuser/.ssh/id_rsa.pub.
The key fingerprint is:
(*)DSAの2048ビットの秘密鍵はエラーで作成出来ない
$ ssh-keygen -t dsa -b 2048
DSA keys must be 1024 bits
(4)パーミッションを確認する
$ ll /home/testuser/.ssh/
合計 8
-rw------- 1 testuser testuser 1743 2月 25 11:45 2016 id_rsa
-rw-r--r-- 1 testuser testuser 412 2月 25 11:45 2016 id_rsa.pub
$ll -ld /home/testuser/.ssh/
drwx------ 2 testuser testuser 4096 2月 25 11:45 2016 /home/testuser/.ssh/
(5)秘密鍵のパーミッションを600に変更
$ chmod 600 /home/testuser/.ssh/id_rsa
-rw------- 1 testuser testuser 1743 2月 25 11:45 2016 /home/testuser/.ssh/id_rsa
(6)sshサーバ側のconfig変更
/etc/ssh/sshd_config ファイルを修正する。
デフォルトでは「パスワード認証=有効、公開鍵認証=無効」であるため、「パスワード認証=無効、公開鍵認証=有効」に変更する。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no
また設定が以下であることを確認する。
ChallengeResponseAuthentication no
(7)sshサーバ側に公開鍵を設置する
ファイル名は以下のとおり。
/home/testuser/.ssh/authorized_keys
(8)sshサーバを再起動することにより、sshd_configを再読み込みする。
# /etc/init.d/sshd restart
(9)scpコマンドを実行する
(10.0.0.1 上の/tmp/test.txtをローカルの/tmpにコピーする)
$ scp testuser@10.0.0.1:/tmp/test.txt /tmp/
Enter passphrase for key '/home/testuser/.ssh/id_rsa':
test.txt 100% 0 0.0KB/s 00:00
逆のコピー(ローカルの/tmp/test.txtを10.0.0.1 上の/tmp/にコピー)
$ scp /tmp/test.txt testuser@10.0.0.1:/tmp/
Enter passphrase for key '/home/testuser/.ssh/id_rsa':
test.txt 100% 0 0.0KB/s 00:00
スポンサード リンク
[redhat linux 技術ドキュメント トップ]
[FAQ CENTER トップ]