【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