#author("2022-01-11T05:34:39+00:00","default:src128","src128") #author("2023-10-21T06:35:40+00:00","default:src128","src128") &tag(ネットワーク,ssh); *目次 [#p8d799b1] #contents *関連ページ [#f06e0580] -[[Putty]] -[[github]] -[[Poderosa]] -[[./ポートフォワード]] *基本 [#j5374628] -公開鍵は相手ホストに渡す。秘密鍵は自分で持っておく。 *鍵 [#t921d788] **秘密鍵のフォーマット [#s2287732] 鍵ファイルの形式はクライアントによってまちまちなので非常にわずらわしい。形式がわからなくなったときはテキストエディタで開くとわかるかも。 ,形式,対応クライアント,ファイルの特徴 ,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) [#w71c5f20] -ssh-keygenで生成。出力場所に注意(途中ファイル名を聞かれるので明示したほうがいいかも)。 ssh-keygen -鍵名をきかれたとき、単にファイル名だけをいれるとカレントディレクトリにファイルが書き出される。 **鍵の生成(PuTTY Key Generator)[#k4f864f2] ***鍵の生成 [#x697b9e6] -最近のバージョンではRSA(2048)が標準。 ***秘密鍵の保存 [#r104cebf] -秘密鍵はクライアントによって形式がことなる。 -Puttyで使う場合は、Actions → Save private keyで保存する。拡張子としてppkをつけておけば区別しやすいかも。 -Poderosaで使う場合は、[Conversions] → [Export ssh.com key]で保存する。拡張子は特にきまってないらしい。 -UNIX端末なので使う場合は、[Conversions]→[Export OpenSSH key]で保存する。 ***公開鍵の保存 [#q42ceb43] -OpenSSHが動いているLinuxサーバーに持って行く公開鍵は、Key → Public key for pasting to OpenSSH authorized keys file:の欄にある内容をコピーして使う。Save public keyで保存するとダメ。 #ref(save.png) **鍵の変換(ssh-keygen) [#y71c079d] ***秘密鍵からパスフレーズを削除 [#u93e04e5] -[[OpenSSHで生成したed25519形式の秘密鍵はputtygenで読み込めない - Qiita:https://qiita.com/kiwi-bird/items/56927168836ad59c9163]] -ssh-keygenで解除できる。鍵付きの秘密鍵をコピーしそれを解除する。 cp id_rsa id_rsa_np ssh-keygen -p -f id_rsa_np ※以下古い情報。openssh形式の鍵の場合opensslコマンドだとエラーになることも。 -以下のコマンドで実行。rsa形式の場合 # openssl rsa -in <元の秘密鍵ファイル> -out <変換後の秘密鍵ファイル> -dsa形式の場合 # openssl dsa -in <元の秘密鍵ファイル> -out <変換後の秘密鍵ファイル> ***秘密鍵から公開鍵を生成する方法 [#r345a8f0] -ssh-keygenコマンドを作成する。最後は秘密鍵名 ssh-keygen -y -f <秘密鍵名> **鍵の変換(Putty) [#r3208609] -puttyを使った鍵の変換は[[Putty]]へ **公開鍵のサーバーへの登録(★重要) [#xa986e2d] -作成した.pubファイルをサーバーの~/.sshのauthorized_keysに追記する。 -追記する際エディタのコピペすると改行部分の扱いなどで失敗することがある。 -FTPなどを利用して.pubファイルを転送後、サーバー上でファイルを追加したほうが良い。 *Tips [#vd097f09] ** sshコマンド [#y9941b1a] ***パスフレーズを確認 [#wc9640a5] -[[How do I verify/check/test/validate my SSH password? - Stack Overflow:http://stackoverflow.com/questions/4411457/how-do-i-verify-check-test-validate-my-ssh-password]] -ssh-keygenで確認できる ssh-keygen -f /tmp/my_key --正解だった場合: 秘密鍵を読み込み関連する公開鍵を表示 --間違いだった場合: load failedが表示される。 --パスフレーズが設定されていない場合、関連する公開鍵が即座に表示される。 **~/ssh/configを使う [#vd899d59] -[[~/.ssh/config で簡単に複数ホストへのSSH接続を管理する - すぱぶらの日記:http://d.hatena.ne.jp/superbrothers/20090730/1248971671]] **指定コマンドしか実行できない設定 [#p6285b49] -リモートのauthorized_keysをいじればいける。例えばgrepとかバックアップ専用とか。 -[[SSH - 指定コマンドしか実行できない鍵の設定 - Qiita:http://qiita.com/tukiyo3/items/0fd9c6cb57a97cd8fdfa]] ** Macの特殊事情 [#yad2be9f] ***パスフレーズの入力に関して [#lb3d0946] -Macの場合パスフレーズ認証するとその内容がキーチェインに保存されるためパスフレーズを再度入力する必要がない。再度入力したい場合、キーチェインアクセスを起動し、SSH:/Usersの内容を探して削除したあと、ssh-agentプロセスを再起動すればよい。 ***秘密鍵の使い分け [#f1853211] -同一ホストに対する秘密鍵が複数存在しても適切に使い分けてくれない場合、~/.ssh/configに IdentitiesOnly yes を追加するとうまくいくかも。ssh-agentに保持されている鍵情報じゃなくてファイルを使ってくれるようになるらし。 **リモートコマンド実行時のPATHやその他の環境変数の設定。 [#u39ec173] -「ssh tanaka@dev コマンド名」のように実行した場合。 -macOSだと/usr/bin:/bin:/usr/sbin:/sbinだけしか設定されていないように見える。 --デフォルトshellがzshの場合、.zshrenvにPATHを追加する。 --デフォルトshellがzshの場合、.zshenvにPATHを追加する。 --デフォルトshellばbashの場合、未検証(.bashrc?) --sshの設定を変更。~/.ssh/environmentにPATHを追加。sshd_configでPermitUserEnvironmentを設定。 *トラブルシューティング [#kfe1b53f] **なぜかログインできない!! [#h15f7496] -vつきで実行してみる。 ssh -vvv ホスト -サーバーの.sshおよびauthorized_keysのパーミッションのチェック(700/600)。 -authorized_keysへの公開鍵ファイルの内容のコピペミスチェック(特にエディタの改行まわり)。 **Too many authentication failures for でログインできない [#s0586f82] -[[sshで「Too many authentication failures for ...」が出た場合の対処法 - tkuchikiの日記:http://tkuchiki.hatenablog.com/entry/2013/02/20/104609]]が参考に。ssh-agentに登録している鍵の数分試行錯誤してしまうことが原因らしい。 -登録を減らすか、.ssh/configで、identitiesOnly yesを追加する。Macの場合もキーチェインに登録してあったパスワードをつかってくれなくなる。 **Macでgit pullしてError: Permission denied (publickey) [#b3eeb251] -まず原因を解明するために、remoteリポジトリへsshログインしてみる。 -ssh hogehoge でログインしてもhogehogeに該当する秘密鍵が一切表示されない。ssh-add -lで確認してもいっさい使われない。 SSH_AUTH_SOCKは設定されている。 -どうやら.ssh/configに該当するホスト名はエイリアス名ではだめで、そのもズバリのエントリがないとだめみたい。 -git clone foo:/myrepo したならば、fooがbarのエイリアスだったとしても、fooのエントリが.ssh/configにないとみてくれない。 **no mutual signature supported [#lc021a0f] -[[`sign_and_send_pubkey: no mutual signature supported` が出た時の対処 - Qiita:https://qiita.com/asari-mtr@github/items/8327b8cbd6fd49e4bec2]] -ログインするがわの~/.ssh/configに「PubkeyAcceptedKeyTypes ssh-dss」を追加。リンクと異なり「HostKeyAlgorithms ssh-dss」があると逆にだめだった? #pre{{ Host example.com PubkeyAcceptedKeyTypes ssh-dss }}