Tag: ネットワーク ssh
関連ページ†
- 公開鍵は相手ホストに渡す。秘密鍵は自分で持っておく。
秘密鍵のフォーマット†
鍵ファイルの形式はクライアントによってまちまちなので非常にわずらわしい。形式がわからなくなったときはテキストエディタで開くとわかるかも。
形式 | 対応クライアント | ファイルの特徴 |
OpenSSH形式 | UNIX系のsshコマンド | 鍵ファイルの先頭に「-----BEGIN RSA PRIVATE KEY-----」。ファイル名はid_rsaとかで作られることが多い。 |
SECSH形式 | Poderosa | 鍵ファイルの先頭に「---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----」。 |
Putty形式 | Putty | 鍵ファイルの先頭に「PuTTY-User-Key-File-2: ssh-rsa」。ファイル名は*.ppk |
鍵の生成(ssh-keygen)†
- ssh-keygenで生成。出力場所に注意(途中ファイル名を聞かれるので明示したほうがいいかも)。
ssh-keygen
- 鍵名をきかれたとき、単にファイル名だけをいれるとカレントディレクトリにファイルが書き出される。
鍵の生成(PuTTY Key Generator)†
鍵の生成†
秘密鍵の保存†
- 秘密鍵はクライアントによって形式がことなる。
- Puttyで使う場合は、Actions → Save private keyで保存する。拡張子としてppkをつけておけば区別しやすいかも。
- Poderosaで使う場合は、[Conversions] → [Export ssh.com key]で保存する。拡張子は特にきまってないらしい。
- UNIX端末なので使う場合は、[Conversions]→[Export OpenSSH key]で保存する。
公開鍵の保存†
- OpenSSHが動いているLinuxサーバーに持って行く公開鍵は、Key → Public key for pasting to OpenSSH authorized keys file:の欄にある内容をコピーして使う。Save public keyで保存するとダメ。
鍵の変換(ssh-keygen)†
秘密鍵からパスフレーズを削除†
秘密鍵から公開鍵を生成する方法†
- ssh-keygenコマンドを作成する。最後は秘密鍵名
ssh-keygen -y -f <秘密鍵名>
鍵の変換(Putty)†
公開鍵のサーバーへの登録†
- 作成した.pubファイルをサーバーの~/.sshのauthorized_keysに追記する。
- 追記する際エディタのコピペすると改行部分の扱いなどで失敗することがある。
- FTPなどを利用して.pubファイルを転送後、サーバー上でファイルを追加したほうが良い。
Tips†
sshコマンド†
パスフレーズを確認†
/ssh/configを使う†
指定コマンドしか実行できない設定†
Macの特殊事情†
パスフレーズの入力に関して†
- Macの場合パスフレーズ認証するとその内容がキーチェインに保存されるためパスフレーズを再度入力する必要がない。再度入力したい場合、キーチェインアクセスを起動し、SSH:/Usersの内容を探して削除したあと、ssh-agentプロセスを再起動すればよい。
秘密鍵の使い分け†
- 同一ホストに対する秘密鍵が複数存在しても適切に使い分けてくれない場合、~/.ssh/configに IdentitiesOnly yes を追加するとうまくいくかも。ssh-agentに保持されている鍵情報じゃなくてファイルを使ってくれるようになるらし。
トラブルシューティング†
なぜかログインできない!!†
- vつきで実行してみる。
ssh -vvv ホスト
- サーバーの.sshおよびauthorized_keysのパーミッションのチェック(700/600)。
- authorized_keysへの公開鍵ファイルの内容のコピペミスチェック(特にエディタの改行まわり)。
Too many authentication failures for でログインできない†
Macでgit pullしてError: Permission denied (publickey)†
- まず原因を解明するために、remoteリポジトリへsshログインしてみる。
- ssh hogehoge でログインしてもhogehogeに該当する秘密鍵が一切表示されない。ssh-add -lで確認してもいっさい使われない。 SSH_AUTH_SOCKは設定されている。
- どうやら.ssh/configに該当するホスト名はエイリアス名ではだめで、そのもズバリのエントリがないとだめみたい。
- git clone foo:/myrepo したならば、fooがbarのエイリアスだったとしても、fooのエントリが.ssh/configにないとみてくれない。