rokkonet

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

sshサーバー インストール

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/ID_RSA.pub
ID_RSA.pubのファイル属性は 644 。
サーバーの authorized_keys に追記したら以後不要なので削除する。
authorized_keysの属性は 600 。

秘密鍵

ファイルパス CLEINT: ~/.ssh/id_rsa
 このファイル名を変更した場合は、ssh接続時に
  $ ssh –i ~/.ssh/CLIENT-FILE
 と -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    # YOUR SSHD PORT
    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

秘密鍵id_rsasshクライアントの所定の場所に置く。
 linuxならば ~/.ssh/ に。
  クライアント設定
   /etc/ssh/ssh_config
    RSAAuthentication yes
    IdentityFile ~/.ssh/SERVER-USER-CLIENT-ed25519

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

 
失くした公開鍵復元
$ ssh-keygen -yf 秘密鍵
 
 
クライアントからサーバーへの接続

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