Edited at

ssh config最強設定

更新履歴

(2017/01/22 Includeについて追記)

(2017/10/28 KexAlgorithm から ecdh を削除, Macs の順序を再考)

(2017/12/07 MacsからRIPEMD系を削除)

(2019/06/13 VSCode Remoteが使えないのでLogLevelを削除)


  • ssh/config のテンプレートとして使ってください。


  • ホストキーの順序を変えると @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ が出る場合があります



  • SSH鍵は ed25519 (エドワーズ曲線)を推奨します




  • ssh configは重複があると最初の項目が優先されます。このテンプレートは Include 文と併用してください。


    • Host *.example.com みたいなのは最初にかくこと



  • Includeは OpenSSH 7.3 から使えるっぽいです。以前のOpenSSHの場合、手動でファイルの内容を展開して単一のファイルで運用してください。



  • ちょっとだけ古いディストリビューションを利用すると、デフォルトでは古い暗号化スイートを使わされる。

    それを防ぐために暗号アルゴリズムの優先順位を明示的に記入。OpenSSHのデフォルト設定を参考に、その上で弱い暗号を削除している。


    • SHA1を使わない


      • RIPEMD160はオープンなので一応入れてある



    • RSAよりEC(楕円曲線)を優先

    • 暗号はパフォーマンスより強度を優先


      • ctrよりgcmを優先した

      • どうせAESならハードウェア支援が効く



    • 鍵付きハッシュでは安全と言われるetm (Encrypt-then-MAC; 暗号化の後にMAC)を優先する



  • AEAD の時代です。



~/.ssh/ssh_config (いろいろHostを書くファイル)

普通の通りに書く。ただファイル名はssh_configとしておく。あとでIncludeされる。

Host ssh.example.com

User ...
HostName ssh.example.com
...


~/.ssh/config (デフォルト値用のファイル)

先頭にHostを書いたConfigのインクルードを書く

これによって config → ssh_config の順に適用されるが、重複項目は最初だけ適用されるのでデフォルト値はこのファイルから取られる。

Include ~/.ssh/ssh_config

# お好みで
# LogLevel DEBUG
# LogLevel VERBOSE

##### 接続系 #####
# 圧縮。gitなどのファイル転送にも適用される、テキストやプログラムファイル多ければON
# 圧縮しづらいファイル転送や、tmux使うときは圧縮率が低いのでOFFでも可
Compression yes

# ネットワークコネクティビティを15秒ごとにチェック
# 3回失敗で切断
ServerAliveInterval 15
ServerAliveCountMax 3

# フォワーディング失敗時にExitするかどうか
# VPN代わりのトンネルを張り続けたいときに便利
# ExitOnForwardFailure yes

# 接続試行回数
ConnectionAttempts 3

##### コントロールマスター接続で永続化するかどうか #####
# ControlMaster auto
# ControlPersist 2h
# ControlPath ~/.ssh/master_%r@%h-%p

##### セキュリティ系!重要!! #####
# 以下は、OpenSSH 6.8を参考にしたもの。
# NSAフリーなChacha20を優先的に、そのあとは暗号強度の順。aes-cbcはダメらしい
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

# 鍵交換アルゴリズム、楕円曲線がナウくておしゃれ。あとは強度の順
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

# 鍵付きハッシュのアルゴリズム
Macs umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-64-etm@openssh.com,umac-64@openssh.com

# ホスト鍵をモダンな順で検証
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256

# 鍵生成の頻度!あまり小さくするとパフォーマンスに影響。
# 第一引数は何バイトごとか、第二引数は鍵交換までの秒数
RekeyLimit default 60

# おまけ、ホストフィンガープリントを視覚的に表示
# VisualHostKey yes


  • 6.6より前のOpenSSHを使っている場合 (ssh -V) CiphersとKexくらいは上記に変えたほうがいい。


  • コントロールマスターの設定をすると、HTTP KeepAliveのように接続が永続化されるほか、複数のSSHを起動して接続してもコネクションは1本だけにできる(マルチプレクシング; 多重化)


  • さくらのレンタルサーバーに繋がらないときは、Macsあたりを変更すること。


  • ヤマハルーターにつながらない時は KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group1-sha1ssh-config の個別のホスト設定に書く



つながらない場合のss-config

Host yamaha-router

HostName 192.168.0.251
User username
# Ciphers aes128-ctr
KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
Macs hmac-sha1
Host sakura-rental-server
HostName x.sakura.ne.jp
User username
Macs hmac-sha1


参考