第3章 SSH接続

大まかな流れは以下の通りである.

ローカル:公開鍵・秘密鍵の生成

ローカルの~/.sshにおいて鍵を生成する.

リモート:ローカルの公開鍵を登録

ローカルの公開鍵の中身をリモートの~/.ssh/authorized_keysに書き込む.

ローカル:エイリアスの設定(任意)

リモートへ接続するときの名前を登録する. ~/.ssh/configにリモートの名前やIPアドレスを指定する.

鍵の作成

接続元(ローカル)の~/.sshディレクトリに移動して,公開鍵・秘密鍵を生成する. 最近は鍵のタイプにed25519が推奨されているようなので,以下で鍵を作成する.

ssh-keygen -t ed25519

うまくいまない場合や何らかの理由がある場合は, 以下のようにRSA鍵を生成することもできる.

ssh-keygen -t rsa -b 4096

実行するとid_rsaの保存名などを聞かれるので進める. このとき,複数のサーバーに接続する場合は同じ鍵を使いまわさずに別の鍵を生成するべきであるから, 保存名は既存のものと重複しないよう適宜変更する.

終了するとid_rsaとid_rsa.pubが生成される. id_rsaが秘密鍵,id_rsa.pubが公開鍵である. 次の段階では公開鍵を接続先(リモート)にコピーする.

公開鍵の登録

リモートへの公開鍵のコピー

ローカルからリモートに公開鍵を登録する. 登録とは,リモートの「~/.ssh/authorized_keys」というファイルに ローカルの公開鍵の中身を書き込むことである.

そのためには一度ローカルの公開鍵をリモートへコピーし, その中身をcatコマンドを用いるなどしてリモートのauthorized_keysに書き込めばよい.

コピーにはUSBメモリを経由するなどの方法もあるが,ここではscpを用いる. まずリモートで以下を実行して,リモートのIPアドレスを調べる.

ip a

この出力結果の中にIPアドレスが含まれているはずである.

ついでにls -laでホームディレクトリ(~/)に「.ssh」ディレクトリがあるか確認し, なければ作成しておく.

また,.sshのパーミッションが700(rwx——)かも確認しておく. そうなっていなければ

chmod 700 ~/.ssh

を実行して変更する.

次にローカルで以下を実行して,公開鍵をリモートにコピーする. 接続先を指定するときに先ほど調べたIPアドレスが必要となる. 接続時にはリモートのパスワードが求められるので入力すること.

scp ~/.ssh/id_rsa.pub <リモートのユーザー名>@<リモートのIPアドレス>:~/.ssh/

公開鍵の名前は適宜読み替えよ.

リモートでの公開鍵の登録

リモートを直接操作するか,ローカルから以下を実行して接続し, リモートで作業する.

ssh <リモートのユーザー名>@<リモートのIPアドレス>

リモートの「~/.ssh」へ移動して,先ほどコピーした公開鍵があることを確認する. この公開鍵をcatでauthorized_keysに書き込む.

cat id_rsa.pub >> authorized_keys

これで登録は完了. ディレクトリに残っている公開鍵は削除してよい.

最後に,作成されたauthorized_keysのパーミッションが 600(rw——-)か確認しておくこと. そうでなければ

chmod 600 ~/.ssh/authorized_keys

を実行してパーミッションを変更しておく.

これでローカルから

ssh <リモートのユーザー名>@<リモートのIPアドレス>

を実行することでリモートに接続できるようになるはずである. 鍵を登録したにも関わらずここでパスワードが求められる場合は, つぎの節に従い秘密鍵のパスを登録することで改善する可能性がある.

エイリアスの登録

SSH接続時に毎回IPアドレスを入力する手間を省くために, 接続時の名前(エイリアス)を登録すると良い. .ssh/configファイルに以下のように記述する.

Host <エイリアス名(自由)>
  HostName <リモートのIPアドレス>
  User <リモートのユーザー名>
  IdentityFile ~/.ssh/<使用する秘密鍵の名前>

以降はここで登録した名前で

ssh <エイリアス名>

を実行するだけでSSH接続が可能となる.

問題の調査

正常に接続できない場合,以下のように「-v」オプションを付すことで 接続時の情報を表示できる.

ssh -v <接続先>