SCP まとめ (Redhat Linux)

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 トップ]