こうこく
作 ▸

Amazon Linux (EC2) に秘密鍵でSSH接続できるようにする

べつにデフォルトで秘密鍵だけど違う鍵を使いたかったので

もくじ

作業の流れ

秘密鍵で接続するために必要な作業は、基本的にはこう↓

  1. ssh-keygen コマンドで公開鍵・秘密鍵のペアを作る
  2. サーバー側に公開鍵を置く
  3. クライアント側 (サーバーに接続したい端末) に秘密鍵を持ってくる
  4. クライアント側から秘密鍵を使って接続する

設定作業は、『秘密鍵でログインできるようにしたいユーザー』でサーバーにログインして行う。

公開鍵の置き場所を確認

鍵を作る前に置き場所を確認しておく。/etc/ssh/sshd_configAuthorizedKeysFile の行を見る。

AmazonLinuxではデフォルトで .ssh/authorized_keys になっている。この記事はその体で書く。

鍵置き場のディレクトリ (この場合は ~/.ssh) のパーミッションが 700 になっていることも確認し、違ったら chmod で設定しておく。

chmod 700 ~/.ssh

公開鍵・秘密鍵のペアを作る

鍵置き場で ssh-keygen して、公開鍵・秘密鍵のペアを作成する。

以下の方法でやった場合、デフォルトでは公開鍵として id_rsa.pub が、秘密鍵として id_rsa が作成される。パスフレーズを設定するか聞かれるので、必要なら設定する。

cd ~/.ssh
ssh-keygen -t rsa

サーバー側に公開鍵を置く

作成した公開鍵 id_rsa.pub を鍵ファイルに追記する。鍵ファイルのパーミッションが 600 になっていることも確認し、違ったら chmod で設定しておく。

cd ~/.ssh
ssh-keygen -t rsa
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 authorized_keys

クライアント側に秘密鍵を持ってくる

作成した秘密鍵 id_rsa をクライアント側に持ってくる。FTPで持ってくるなり、本文をコピペするなり適当な方法で。ファイル名はなんでもいい。

持ってきたら、サーバー側の秘密鍵は消してよい。消しておく。

rm ~/.ssh/id_rsa

クライアント側から秘密鍵を使って接続する

例えば ssh コマンドを使って、ec2-user として 1.1.1.1 に接続するなら以下の通り。-i オプションでローカルの鍵ファイルを指定できる。

ssh -i /path/to/kagi ec2-user@1.1.1.1

WinSCP を使う場合は、サイトの設定から SSH → 認証 でローカルの鍵ファイルを設定すればよい。ただし ssh-keygen で作成した鍵はPEM形式なので、そのままだとWinSCPで利用できない。PuTTY形式に変換させてくれと言われるので、言われるままに変換してもらったファイルを別名で保存し、そちらを選択して使用する。

TeraTerm を使う場合は、リンク先を以下のようにしたショートカットを作るのが便利。

秘密鍵で接続できるTeraTermショートカット
C:\path\to\teraterm\ttermpro.exe 1.1.1.1 /ssh2 /auth=publickey /user=ec2-user /keyfile=C:\path\to\kagi

参考にさせていただいた記事

EC2にSSH接続用のユーザーを作成する - Qiita

【AWS】踏み台EC2から別EC2へssh接続する方法 - Qiita

この記事に何かあればこちらまで (非公開)