【Linux小技】 sshやscpをパスワードなしで利用する方法 (複数台サーバ対応スクリプト付)
![]() | Tweet |
今まで、
rootアカウントでrshを利用する方法や、
rootアカウントでtelnetを利用する方法
を紹介しましたが、今回はsshをパスワードなしで利用する方法です。
基本的にはCentOS5やCentOS4や同等のRedHat ELで確認してます(たぶん他のOSでも問題ないと思いますが・・・)
sshなので、一般ユーザおよびrootでも使うことができます。
基本的にはCentOS5やCentOS4や同等のRedHat ELで確認してます(たぶん他のOSでも問題ないと思いますが・・・)
sshなので、一般ユーザおよびrootでも使うことができます。
A:2台のサーバ間での設定
まず、基本です。下の図のように、server01、server02の2台が通信できる状態です。
server01、server02ともに同じユーザ名が登録されていることが必要です。(今回はkenユーザです。同じuid、gidにまでする必要はないかもしれません)
(図1) +-------+ +--------| NW SW |-----+ | +-------+ | | | +----------+ +----------+ | server01 | | server02 | +----------+ +----------+
ssh関連のコマンドを実行します。途中passphraseの入力を支持されますがそのままEnterを押してください。
[ken@server01 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ken/.ssh/id_rsa):
Created directory '/home/ken/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ken/.ssh/id_rsa.
Your public key has been saved in /home/ken/.ssh/id_rsa.pub.
The key fingerprint is:
15:1c:a5:fb:66:7d:23:5d:d9:b5:a8:17:a3:64:57:043 ken@server01
[ken@server01 ~]$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[ken@server01 ~]$ chmod 700 .ssh
[ken@server01 ~]$ chmod 600 .ssh/*
次にserver02にログインして同様な操作を行いますが、完全に同じではありません。
[ken@server02 ~]$ ssh-keygen -t rsa
Enter file in which to save the key (/home/ken/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Generating public/private rsa key pair.
Created directory '/home/ken/.ssh'.
Your identification has been saved in /home/ken/.ssh/id_rsa.
Your public key has been saved in /home/ken/.ssh/id_rsa.pub.
The key fingerprint is:
77:7e:56:92:c4:4a:23:0a:6a:f8:4c:5e:64:25:75:e37 kent@server02
[ken@server02 ~]$ scp ~/.ssh/id_rsa.pub ken@server01:~/.ssh/id_rsa_server02.pub
ken@server02's password:
●server01にログインしなおします。
[ken@server01 ~]$ cat ~/.ssh/id_rsa_server02.pub >> ~/.ssh/authorized_keys
●authorized_keysを追記します
[ken@server01 ~]$ scp .ssh/authorized_keys ken@server02:~/.ssh/
ken@server02's password:
[ken@server01 ~]$ ssh ken@server02 'chmod 700 ~/.ssh ; chmod 600 ~/.ssh/*'
これでパスワードなしでsshやscpが、server01とserver02の間で実行できるようになると思います。
B:複数台サーバがあるときの、サーバ相互間ssh設定
2台のときであれば「A」の方法でも手間は少なく、おそらくWeb検索すればいくつか方法は出てくると思います。ですが「A]の方法ではサーバの台数が多くなると結構しんどいです。
というわけで、「A」でやったことを複数台でもできるようにスクリプトを使います。
例としてホスト名がserver01, server02, server03の3台のネットワークがあるとします。
(図2) +-------+ +--------| NW SW |-----+--------------------+ | +-------+ | | | | | +----------+ +----------+ +----------+ | server01 | | server02 | | server03 | +----------+ +----------+ +----------+
no-ssh-password.sh
#!/bin/sh #------------------ # set param hosts="server01 server02 server03" user="ken" #user=`who -m |awk {'print $1'}` #------------------ ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/* for host in ${hosts} do ssh ${user}@${host} 'ssh-keygen -t rsa' ssh ${user}@${host} 'cat ~/.ssh/id_rsa.pub' | cat ->> ~/.ssh/authorized_keys done for host in ${hosts} do scp ~/.ssh/authorized_keys ${host}:~/.ssh ssh ${user}@${host} 'chmod 700 ~/.ssh ; chmod 600 ~/.ssh/*' done exit
スクリプト5行目、6行目の"hosts"と"user"は各々の環境に合わせて変更してください。
hosts:sshのパスワードなしでログインしたいサーバのホスト名をサーバの数だけ記入。各サーバ名はスペースを空けて記述。
user:ユーザ名を記入。今回はkenで行うのでkenとしてます。
このスクリプトを実行します。
[ken@server01 ~]$ chmod 755 ./no-ssh-password.sh
[ken@server01 ~]$ ./no-ssh-password.sh
一応、注意点としては、
(1) 各サーバには、同じユーザが登録されている必要があります
(2) passphraseを聞かれるところは、何も考えずEnterを押しましょう。何回も入力が必要です
Enter file in which to save the key (/home/ken/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
(3)パスワードを聞かれるときは、各マシンのログインパスワードを入力しましょう。
ken@server03's password:
(4) 間違えてもやり直しは可能です。そのときid_rsaの上書きについて聞かれますが「y」でOK
/home/ken/.ssh/id_rsa already exists.
Overwrite (y/n)? y
(5) サーバ間で初めてログインするときは、下のようなものを聞かれます。一回だけなので、初めに全部のパターンでログインしておくことをお勧めします。忘れがちなのが今いるサーバ自身へのログインです。
The authenticity of host 'server03 (192.168.1.3)' can't be established.
RSA key fingerprint is 1d:1c:26:12:97:d1:a1:2f:af:09:aa:58:95:4d:af:59.
Are you sure you want to continue connecting (yes/no)? yes
最後にお約束ですが、このエントリーに記入した方法を用いたことにより、システムの不具合、セキュリティ等に問題が起こったとしても当方は責任を負いかねます。自己責任での利用をお願いいたします。
【関連記事】
![]() | Tweet |
このカテゴリの最新記事一覧 | |
---|---|
| ―Linux | 16時07分 | comments:0 | trackbacks:1 | TOP↑