SSHの公開鍵設定

他PCを遠隔で操作したい場合sshでpasswordをいれてつなぐことが多いが、 ssh接続は何回でも間違えられるので、総当たり的に調べれば意味をなさないためセキュリティ的に弱いと言われている。 そこで、rsa暗号等を使って特定のPCとのみ接続するようにできる方法があるので紹介する。




RSA秘密鍵、公開鍵生成


まずAというPCからBというPCにつなぎたいということにする。 まずはA側で公開鍵と秘密鍵のペアを生成する。 最初にホームディレクトリ(cd ~の場所)で.sshというディレクトリをmkdirで作る。 次にcd .sshで.sshに入ったあと以下のコマンドで、秘密鍵・公開鍵のペアを生成する。

$ ssh-keygen -t rsa -f <鍵の名前(任意)>

ここでパスワードを聞かれるので、必要ならば設定する。必要なければそのままEnter。 -tオプションは鍵の種類を指定できる。 今回はrsaを指定しているが他にもdsa, ecdsa, ed25519が使える(dsa, ecdsaはセキュリティ的に弱いらしいので注意)。 そうすると、<鍵の名前(任意)>と<鍵の名前(任意)>.pubというファイルができるので、 lsコマンド等でできていることを確認する。この内.pubがついたほうが公開鍵でついていないほうが秘密鍵である。
秘密鍵は誰にも渡さないこと!

接続のための設定


引き続きA側での設定で、configというファイルを同じディレクトリ内に作る。 テキストエディタは好みのものでいいが、初心者はnanoとかが良いかもしれない。 慣れている人はvimとかemacsでも良いと思う。

$ [nano, vim, emacs, etc.] config

上のコマンド([]内はどれかを選ぶ)でconfigファイルを生成して、 中身を書き込んでいく。

Host <接続名(任意)>
  HostName <接続先のアドレス(IPなど)>
  IdentityFile ~/.ssh/<秘密鍵の名前>
  User <接続先のユーザー名>

これで保存すれば、A側の設定は終了。

次にB側の設定を行う。まず何らかの方法でA側で生成した公開鍵をB側に持ってくる。 B側でSSHのパスワード認証が許可されていれば、B側でもAと同じように.sshディレクトリを作って、

$ scp <公開鍵(.pub)> <接続先のユーザー名>@<接続先のアドレス(IPなど)>:~/.ssh

で公開鍵をB側の.sshディレクトリに送れる。 その後に、B側の~/.sshに入って<公開鍵(.pub)>をauthrized_keysに名前変更する。
既に同名のファイルがある場合は、<公開鍵(.pub)>の中の文字を全てコピーして、authrized_keysの新しい行に追記する。