メニュー

【ssh】公開鍵認証の登録

【1】ローカル(PC)操作

まず始めに「.ssh」というディレクトリが存在するか確認。

ls -d .ssh

「.ssh」ディレクトリが見つからなければ、コマンドから新規作成。

mkdir .ssh

「.ssh」ディレクトリの権限を確認したあと、権限を700に変更。

ls -l -d .ssh
chmod 700 .ssh

そのあと「.ssh」ディレクトリに移動し鍵の作成を始める。鍵は強度の高いed25519を選択した。

cd .ssh
ssh-keygen -t ed25519 -C ""

Cオプションを指定しないままだと、公開鍵には鍵を発行したPCのローカルネットワークで接続するためのアドレスが挿入される。今回は空指定。

次にsshのファイル名を求められるが、特に名前の変更がなければエンターキーを1度だけ押す。
どこの接続情報かわかりやすい名前にしておくこと。
例:example.comなら「example_com_key」

その次に、ローカルで使用する時の接続パスフレーズを求められる。
ここでパスフレーズを設定しておくことで、秘密鍵が流出した場合のリスクを低減できる。

エンターを2度押せばパスフレーズなしで設定できます。
パスフレーズの再設定、解除は可能です。

「example_com_key」で鍵を作成した場合、秘密鍵「example_com_key」と公開鍵「example_com_key.pub」が作成される。
秘密鍵は絶対に無くさないこと。秘密鍵は絶対にサーバーにアップロードしないよう注意すること。

作成した2種類の鍵の権限は600に変更する。

chmod 600 <秘密鍵>
chmod 600 <公開鍵>

【2】リモート(サーバー)操作

パスワード認証でssh接続する。

ssh username@example.com
ssh <ユーザ名>@<ホスト名>

接続先によっては、デフォルトの22ポートでは接続できない可能性がある。
例えば接続先が2200ポートを使っている場合には、以下のように指定して接続する。

ssh username@example.com -p 2200
ssh <ユーザ名>@<ホスト名> -p <接続ポート>

ログイン後、サーバー内で「.ssh」ディレクトリを作成する。
「mkdir: cannot create directory ‘.ssh’: File exists」のようなエラーが出た場合には、「.ssh」ディレクトリは既に作成されている。

「.ssh」ディレクトリを作成したあと、リモート側もローカルと同様に権限を700に変更する。

ls -l -d .ssh
chmod 700 .ssh

そのあと続けて「.ssh」ディレクトリに移動する。「authorized_keys」があるかどうかを確認する。
「ls: cannot access authorized_keys: No such file or directory」というエラーが表示された場合には、コマンドから「authorized_keys」を作成する。

touch authorized_keys

touchはファイルのタイムスタンプを更新するコマンドであり、ファイルが存在しない場合は空のファイルが作成される。なので「authorized_keys」が存在していようと、実際のファイルが空で上書きされる事はない。

もし新規作成なら「authorized_keys」の権限を600に変更する。

chmod 600 authorized_keys

【3】ローカル(PC)操作

Macでssh接続をしたあとローカルの「.ssh」ディレクトリにはknown_hostsというファイルが生成されます。known_hostsには接続先のフィンガープリントが入っています。これがないと次回初めての接続になるので残しておきましょう。

ssh-copy-idから公開鍵を登録する。

ssh-copy-id -i ~/.ssh/<pubとついた公開鍵の名前> <ユーザ名>@<ホスト名>
ssh-copy-id -i ~/.ssh/<pubとついた公開鍵の名前> -p 2200 <ユーザ名>@<ホスト名>

「Number of key(s) added: 1〜〜〜」のようなメッセージが出たら登録成功。

sshコマンドから直接接続情報を打たないようにするためには「~/.ssh/config」の設定を行なう。

Host hogehoge
 HostName <ホストのIPアドレス>
 User <ユーザ名>
 IdentityFile ~/.ssh/<秘密鍵>
 TCPKeepAlive yes
 IdentitiesOnly yes

「TCPKeepAlive yes」はssh接続後にログアウトするまで継続する。
「IdentitiesOnly yes」はIdentityFileから指定された鍵のみを使用する。

接続ポートが2200なら「Port 2200」を追加する。

サンプルのconfigの設定からssh接続するなら、以下のように入力する。

ssh hogehoge