1Password で SSH key 作成・管理
- 2022 6/2
1Password で SSH key 作成、管理をしてみた話をご紹介します。
ssh 公開鍵・秘密鍵を作成するときに ssh-keygen コマンドで使っているオプションをご紹介します。
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/example.com -C who@example.com Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/yourname/.ssh/example.com. Your public key has been saved in /Users/yourname/.ssh/example.com.pub. The key fingerprint is: SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com The key's randomart image is: +---[RSA 4096]----+ |o. | |....o | |oEo=.o . | |=.B.o.oo+ | |=o.* *o.So | |=oo + =o. | |=... = . | |+*..o . | |+B*. | +----[SHA256]-----+ |
-t 鍵タイプを指定する(rsa/dsa)
-b 鍵の長さを指定する
-f 出力ファイルを指定する
-C 新しいコメントを追加する
$ ssh-keygen -l -f ~/.ssh/example.com 4096 SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com (RSA) |
-l 公開鍵の情報(種別、指紋、コメントなど)を確認する
僕個人の判断としては、2048bit RSA鍵で2030年まで戦えるらしいので当分それでいいと思っています。
という意見があるので、これで良しとしてます。
EC2 instance を新しくした後 /etc/hosts を編集して、hostname はそのままで ip address だけ変更して ssh したら毎回下記のような警告メッセージが表示されるようになってしまいました。
[ec2-user@hoge ~]$ ssh server_name Warning: the RSA host key for 'server_name' differs from the key for the IP address '10.123.123.123' Offending key for IP in /home/ec2-user/.ssh/known_hosts:232 Matching host key in /home/ec2-user/.ssh/known_hosts:46 Are you sure you want to continue connecting (yes/no)? |
known_hosts に host name と ip address の古い組合せの接続情報が残っているのが原因なので Matching host key in /home/ec2-user/.ssh/known_hosts:46 のメッセージに書かれているように known_hosts の 46 行目を削除しましょう。
[ec2-user@hoge ~]$ vim .ssh/known_hosts # 46 行目を削除する |
known_hosts を編集後、再び ssh します。
[ec2-user@hoge ~]$ ssh server_name The authenticity of host 'server_name (10.123.123.123)' can't be established. ECDSA key fingerprint is 6b:d3:33:ab:75:ee:50:dc:f0:0a:ca:7c:7e:bd:14:8e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'server_name' (ECDSA) to the list of known hosts. |
その後、切断してもう1度 ssh すると Warning メッセージが表示されなりました。
[ec2-user@hoge ~]$ ssh server_name Last login: Thu Dec 31 00:48:26 2015 from forward_proxy1 __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| |
以上です。
パスワード未設定 user で ssh 接続しようとすると公開鍵認証のみでも失敗してしまうという話をご紹介します。
ssh で下記のようなエラーが発生しました。
ssh t_shigeoka@codenote.net -i ~/.ssh/id_rsa_t_shigeoka Received disconnect from 184.169.144.233: 2: Too many authentication failures for t_shigeoka |
サーバーにログインするための user を作成しまくって、接続テストをしていたため登録している鍵が多すぎてこうなってしまったっぽい。
ssh-add -D |
して、エージェントから全ての鍵情報を取り除くことで解決しました。
・sshで「Too many authentication failures for …」が出た場合の対処法 – tkuchikiの日記
明日からお盆休みということで、iPhone からサーバーに ssh ログインできるように ServerAuditor というアプリをインストールしました。
下記、僕がつまづいた点を共有します。
ssh の秘密鍵は iTunes 経由でファイルをアプリに転送することができます。
コンソールをシングルタップすると、編集モード (edit mode) とプレビューモード (preview mode) に切り替えることができます。編集モードとプレビューモードの見分け方は、キーボードの上部にカスタムキーボードが表示されているかどうかで判別できます。
迷いそうな点については help ボタンから詳しく確認することができます。
下記、2014/08/13 時点での help ページのスクリーンショットです。
気休め程度ですが iPhone からも ssh 接続できるようにしておくと休暇中も安心できそうです。はい。
SSH接続先をいちいちコマンドで打つのは面倒なので、 ~/.ssh/config で複数ホストへのSSH接続を管理しましょう。
ssh の秘密鍵を Dropbox にバックアップしつつ、シンボリックリンクを張って使えるようにする手順をご紹介します。
Dropbox へバックアップ
cp ~/.ssh/* ~/Dropbox/ssh/ |
シンボリックリンク作成
rm -rf ~/.ssh/ ln -s ~/Dropbox/ssh/ ~/.ssh chmod 600 ~/Dropbox/ssh/id_rsa |
以上、.ssh ファイルを管理していきたい現場からお送りしました。
SSH の公開鍵をサーバーに設置した後、いざ鍵認証で接続しようとすると下記のようなエラーを出すことがよくあります。
Permission denied (publickey,gssapi-with-mic). |
・リモート側の .ssh ディレクトリの Permission を 700 に変更する
・公開鍵ファイル(authorized_keys)の Permission を 600 に変更する
# chmod 700 .ssh/ # chmod 600 .ssh/authorized_keys |
・リモート側の .ssh ディレクトリのアクセス権限を SSH 接続するユーザに変更する
・公開鍵ファイルのアクセス権限を SSH 接続するユーザに変更する
(例) 権限を ユーザ: codenote、グループ: programmer に変更する
# chown codenote:programmer .ssh/ # chown codenote:programmer .ssh/authorized_keys |
以上です。
【参考】
・sshで「Permission denied (publickey,gssapi-with-mic).」が出た時 – 今日とは違う明日
Putty でSSHでログインしたサーバーから更に、SSH公開鍵認証で他のサーバーにログインしようとしたらエラーが発生しました。
■ エラー内容
$ ssh example.com Permission denied (publickey,gssapi-with-mic). |
原因は、Pagent の認証鍵の転送の設定がちゃんとできていなかったためです。
認証鍵の転送
Pageant は ssh-agent と同じく、認証鍵の転送機能を持っています。これを利用すれば、たとえログイン先のサーバーに認証鍵がなくても、ローカルにある認証鍵を使用してログイン先からさらに別のサーバーに SSH 接続を確立できます。サーバーに秘密鍵を保存する必要が無いため、秘密鍵の流出の危険を大幅に削減できます。
Pageant による認証鍵の転送は以下の手順で利用できます。
1. Pageant を起動し、必要な認証鍵を登録する。
2. PuTTY を起動する。
3. 普通に SSH ログインするのですが、その際に [接続]-[SSH]-[認証] の「エージェントフォワーディングを認める」にチェックを入れておきます。もしくは、起動時に “-A” オプションを指定する方法もあります。
4. ログイン先で、さらに “ssh <ユーザー名>@<ホスト名>” などとしてさらに別のホストにログインします。
5. Pageant に必要な認証鍵が登録されていれば、正常にログインできるはずです。
なお、Pageant で認証鍵の転送機能を利用するためには、ログイン先の SSH サーバーが OpenSSH でなければなりません。本家 SSH は OpenSSH とは別のプロトコルを使用しており、そちらは Pageant ではサポートされていません。
僕の場合は、Pageantへの認証鍵の登録はしていたのですが、「エージェントフォワーディングを認める」にチェックを入れていなかったので、正常に認証鍵の転送ができていなかったみたいです。