rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

ssh サーバーインストール 鍵生成・配置

2022 Oct. 01.
2022 Feb. 08.
2021 Nov. 23.
2021 May 02.
2021 Apr. 30.
2021 Mar. 25.
2021 Feb. 05.
2021 Jan. 31
2019 Oct. 12.
2018 Sep. 01.
2017 Feb. 12.
2016 Dec. 03.

鍵ファイルについて

公開鍵

ファイルパス SERVER: ~/.ssh/KEYFILE.pub
クライアント側で作成したなら、それをサーバーにコピーする。
KEYFILE.pubのファイル属性は 644 。
サーバーの authorized_keys に追記したら以後不要なので削除してよい。
authorized_keysの属性は 600 。

秘密鍵

ファイルパス CLEINT: ~/.ssh/KEYFILE
 このファイル名を変更した場合は、ssh接続時に
  $ ssh –i ~/.ssh/KEYFILE
 と -i オプションを付ける。
ファイル属性は必ず 600 にすること。

 known_hostsファイル

ファイル名  CLEINT: ~/.ssh/known_hosts
接続したことのあるSSHサーバ証明書が格納されるファイル。

暗号種類

(高強度順に)
ed25519(EdDSA) 鍵長はない
ecdsa(鍵長 521bit 384bit 256bit)
rsa (鍵長 4096bit 3072bit 2048bit)最も広く使用されているため、最もよくサポートされている。
DSA  非推奨。OpenSSH 7.0からはデフォルトで無効化。SSH2で使える。 鍵長が1024bit。
RSA1 非推奨。SSH protocol 1で利用できる。

クライアントが利用できる暗号にする。
EdDSA、2048bitもしくは4096bitのRSA利用がよい。
時とともに古い方式となるので、時々見直す。
 
 

インストール

( Ubuntu )
# apt update && apt install ssh
 
(Arch系のManjaro Linux)
opensshパッケージ

サーバー側設定 /etc/ssh/sshd_config を編集
    Port 22
    RSAAuthentication yes
    PubkeyAuthentication yes ## 公開鍵認証
    AuthorizedKeysFile      %h/.ssh/authorized_keys
    AllowUsers USER1 USER2 USER3  ## 複数のユーザーはカンマではなく空白で並べる
    PermitRootLogin no
    PermitEmptyPasswords no
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    KbdInteractiveAuthentication no
 
    ## 参考 ##
 
 
サーバー側設定 /etc/hosts.allow を編集
    sshd: ALL
        ## ALLは all でもよい

 
サーバー側ファイアウォール設定
# ufw enable
# ufw allow from any to any port 22 proto tcp
# ufw allow from any to any port 22 proto udp
# ufw reload
 
 
事前テスト
# sshd -t
 "sshd: no hostkeys available" となったら、
   # ssh-keygen -A
 
デーモン起動設定
# systemctl enable sshd.service
# systemctl status sshd.service
# systemctl start sshd.service

鍵生成

サーバー上で、ログインを許す一般ユーザーで鍵を生成するので、rootユーザーになっていたら、一般ユーザーに切り替える。
 
$ ssh-keygen -t 暗号方式 -b bit長 -f 鍵ファイルパス [ -C "コメント" ] [ -P "パスフレーズ" ]
 -P:付けなければインタラクティブに尋ねられるので、付けなくてよい。
 -f:拡張子を付けない。普通は ~/.ssh/ID-FILE 。秘密鍵と公開鍵のペアが作られる。

(例)
ssh-keygen -t ed25519 -f ~/.ssh/SERVER-USER-CLIENT-ed25519
ssh-keygen -t ecdsa -b 521 -f ~/.ssh/SERVER-USER-CLIENT-ecdsa521
$ ssh-keygen -t ecdsa -b 384 -f ~/.ssh/SERVER-USER-CLIENT-ecdsa384
$ ssh-keygen -t ecdsa -b 256 -f ~/.ssh/SERVER-USER-CLIENT-ecdsa256
ssh-keygen -t rsa -b 4096 -f ~/.ssh/SERVER-USER-CLIENT-rsa4096

サーバーの ~/.ssh 内に公開鍵を配置する。
公開鍵は ~/.ssh/authorized_keys と連結(追記)する必要がある。
公開鍵がauthorized_keysに連結されていれば *.pubファイルは削除してよい。authorized_keysの属性は600にしておく。
  $ cat ~/.ssh/SERVER-USER-CLIENT-ed25519.pub >> ~/.ssh/authorized_keys
  ( $ rm ~/.ssh/SERVER-USER-CLIENT-ed25519.pub )
  $ chmod 700 ~/.ssh
  $ chmod 600 id_rsa authorized_keys
 
クライアント側
 秘密鍵iをsshクライアントの所定の場所に置く。
 linux
   ~/.ssh/ に置く。
  設定ファイルを編集する。
   /etc/ssh/ssh_config
    IdentityFile ~/.ssh/SECRETKEYFILE
    Port 22 ( or your port)

 android
  connect botならばSDカード内の任意のフォルダに。
  connect botの鍵設定は fnya.cocolog-nifty.com/blog/2012/03/connectbot-andr.html を参照。

 
クライアントからサーバーへの接続

$ ssh -p PORT -i 秘密鍵ファイルパス SERVER-IP-ADDRESS

 

失くした公開鍵復元
$ ssh-keygen -yf 秘密鍵