10 分で入門する SSH(初級編)
こんにちわ、krkettleです
AWS などを利用する上で利用する機会の多い SSH をサクッと紹介していきます
※この記事では OpenSSH について紹介します
この記事を読んで分かること
前提条件
対象者
この記事で紹介しないこと
- SSH サーバ側の説明や設定方法
- OpenSSH 以外の SSH クライアントについて(PuTTY, TeraTerm など)
ssh-agent
や~/.ssh/config
の細かいオプションについて
SSH の仕組みで最低限抑えておくべき内容に関しては以下の記事をご覧下さい
キーペアの作成
※既にキーペア(一組の公開鍵と秘密鍵)を作成している場合はスキップしてください
mkdir ~/.ssh # .sshディレクトリを作成する chmod 700 ~/.ssh # パーミッションを変更する ssh-keygen -t rsa -b 4096 -C "your_email@example.com" Enter file in which to save the key: # 作成したキーをどこに保存する?(デフォルトは$HOME/.ssh/id_rsa) Enter passphrase (empty for no passphrase): # パスワードは何にする?(デフォルトはパスワード無し) Enter same passphrase again: # パスワードもう一回入力してね
デフォルトでは$HOME/.ssh 下に以下の 2 つのファイルが作成されます
また、id_rsa は自分でも修正することが内容にパーミッションを変更しておきます
chmod 400 ~/.ssh/id_rsa
ssh-rsa が非推奨に
OpenSSH 8.3のリリースノートでは
5 万ドル以内 SHA-1 アルゴリズムに対して攻撃可能なため、ssh-rsa を近い将来デフォルトで 無効にするとあります
(OpenSSH 7.2 以降の RSA であればデフォルトで SHA-2 が使われているようです)
It is now possible[1] to perform chosen-prefix attacks against the SHA-1 algorithm for less than USD$50K. For this reason, we will be disabling the "ssh-rsa" public key signature algorithm by default in a near-future release.
そのため、RSA の代わりに ECDSA を選択しても良いでしょう
※一部のレガシーシステムでは ECDSA をサポートしていない場合もあるので要確認
ssh-keygen -t ecdsa -b 521 -C "your_email@example.com" Enter file in which to save the key: # 作成したキーをどこに保存する?(デフォルトは$HOME/.ssh/id_ecdsa) Enter passphrase (empty for no passphrase): # パスワードは何にする?(デフォルトはパスワード無し) Enter same passphrase again: # パスワードもう一回入力してね
※以降の章では ECDSA を用いた場合を想定して紹介します
アクセス先への公開鍵登録
アクセス先の~/.ssh/authorized_keys にアクセス元の公開鍵を追記する必要があります
※AWS などのパブリッククラウドではサーバ(AWS では EC2)作成時に公開鍵を登録することができます
ssh-copy-id は使わない方が良さそう
ssh-copy-id
というコマンドを使うとリモートマシンに公開鍵を登録出来ます
# remote-user: アクセス先のユーザ名 # server-ip: アクセス先の(グローバル)IPアドレス ssh-copy-id -i id_ecdsa.pub [remote-user]@[server-ip]
しかし、ssh-copy-id
ではパスワード認証を利用します
ssh-copy-id is a script that uses ssh(1) to log into a remote machine (presumably using a login password, so password authentication should be enabled, unless you've done some clever use of multiple identities).
そのため、SSH 接続先のサーバ側でパスワード認証を有効にする必要がありますが、
SSH 接続において原則パスワード認証は使わない方がよく、公開鍵認証を使うべきです
(※AWS の EC2 ではデフォルトでパスワード認証が禁止されています)
SSH 接続
※SSH サーバ側は以下の条件を満たしているとします
秘密鍵のパスを指定する
SSH 接続をする上で以下の二つを用いて公開鍵認証を行います
- 接続元の秘密鍵
- 接続先の公開鍵
そのため、SSH 接続する際には秘密鍵のパスを指定する必要があります
ただし、以下のパスであれば指定する必要はありません
# -i: 秘密鍵のパスを指定する ssh -i ~/.ssh/private_key [remote-user]@[server-ip]
アクセスするポート番号を変更する
SSH には 22 番ポートがよく使われます(Well-known Ports)
しかし、セキュリティ的には比較的攻撃されやすいことになるので
SSH 接続に使うポートをサーバ側で変更していることがあります
そのため、クライアント側でも接続先のポートを変更できます
# -p: ポート番号を指定 ssh -p 50022 [remote-user]@[server-ip]
自動切断されないようにする
SSH 接続したまま、しばらく操作しないと接続が切断されます
これを防ぐために一定時間おきに接続先に応答確認を送ります
# -o: 各種オプションを指定 ssh -o ServerAliveInterval=60 [remote-user]@[server-ip]
~/.ssh/config を設定する
引数が多くなってくると毎回コマンドを長々と打つのは面倒ですが
SSH 用の設定ファイル(~/.ssh/config)を作っておけばコマンドを省略できます
Host remote HostName remote-ip User remote-user Port 50022 IdentityFile ~/.ssh/id_ecdsa ServerAliveInterval 60
※remote は任意の名前に変更可能
ssh remote
まとめ
この記事ではキーペアの作成から基本的な SSH 接続の方法を確認しました
再掲ですが、公開鍵認証や電子署名等を確認したい方は以下の記事をご覧ください
krkettle.hatenablog.com