私の~/.ssh/config

3 min read読了の目安(約2700字

~/.ssh/configって便利ですよね。
色々楽出来ますもんね。

レガシー開発してるお前がsshなんて使うのか?って思われるかも知れませんね
確かに商用サーバはtelnetしか無いんですけどね。
それでも開発用VMとかにはsshつながったりするのとレガシー故に使わざるを得ない状況もあって使ってるんで備忘録代わりにここに残しときます。

共通設定

Host *
    GSSAPIAuthentication no
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
    LogLevel ERROR
    Compression yes
    ServerAliveInterval 60
    ServerAliveCountMax 3

GSSAPIAuthentication

GSSAPIとかいうAPIでユーザ認証するかどうかの設定。

現場にこんなハイカラ認証してるサーバなんて無いのでnoにしてます。
yesにしてると最初にはいからさんが通るので無駄な時間がかかります。

StrictHostKeyChecking,UserKnownHostsFile,LogLevel

認証情報を/dev/nullに捨てて毎回初めて繋ぐかのように見せかけ繋ぐかどうか聞かれたら問答無用でyesって自動で答える賢いsshくんを馬鹿にするための設定。

弊害として毎回警告出るようになるのでLogLevelで警告も出ないようにしている。

初めて繋ぐサーバってつないでええか?ってsshくんに聞かれますよね?
繋いでくれって答えると繋いだ情報をローカルに保存するんですがケチケチ貧乏サーバってよく死ぬんですよねラックマウントだけど殻割ったら中に中華ノートでも入ってんじゃね?ってレベルで死にます。
そして壊れた時はその時の担当の力量にに基づいたクローン度のそれっぽいものが復旧されるんですが大抵そのサーバに繋ぐ時に賢いままのsshくんは保存してる情報と違うからコイツ偽物や!って繋いでくれなくなります。
というわけでこの設定を入れてsshくんを鳥頭にするんですね。

Compression

通信を圧縮する設定

サーバ、クライアント側のCPU負荷が多少犠牲になります。
とりあえずつながればいいだろ的な思想で足元に転がってるHUBを継ぎ足して作られたんじゃないかと思われるようなヤバイネットワーク使ってるのでたまに10MbpsみたいなトンデモHUBが紛れ込んでたりします。
こっちはネットワークなんてどうなってるか知らないし知りたくもないのでこの設定を入れて雀の涙ほどでもいいので速度アップを図ろうという涙ぐましい設定の痕跡です。

ServerAliveInterval,ServerAliveCountMax

繋いだまま放置してたら切ってくるサーバとかいるので
定期的にkeepaliveを送って切られないようにする設定。

個別設定(違うサーバ経由しないとつながらない時)

Host server1
    HostName 繋ぎたいサーバのIP
    ProxyCommand sshpass -p経由サーバのPW ssh -YC -qW %h:%p username@経由サーバのIP

ProxyCommandにsshpassコマンド噛ませてsshコマンド使うようにすると経由サーバのパスワード認証すっとばせて楽ですセキュリティは死んでるけど😆
パスワードが平文で残っちゃうのが嫌な場合があればsshpass -pxxxxを消して対応するけど
そもそもローカルネットワークで完結してるのでこれでいいのだ

ローカルネットワークなのに直接繋がるIPが欲しければ金を払えとか誘拐犯みたいな事言われます。
しかもIP1個ずつサブスク契約だったりします。
流石技術立国日本ですね
おもてなしの心は有料ってことですね

トンネル設定(localhostのポートに他のサーバのポートを繋ぐ)

Host tunnel
    HostName 繋ぎたいサーバ
    User UserID
    GatewayPorts yes
    LocalForward 15432 localhost:5432
    LocalForward 25432 繋ぎたいサーバを経由して繋ぎたいサーバ:5432

これでssh -Nf tunnelと実行するとローカルの
15432に繋ぎたいサーバの5432が繋がって
25432に繋ぎたいサーバを経由して繋ぎたいサーバの5432ポートが繋がる
ようになります。
又GatewayPortsなのですがlocalhost以外からのアクセスを受け付けるかどうかの設定なので人によっては不要です。

なんで私がGatewayPorts入れてるかって言うと
他の開発者がこれやってるの見て
「僕もやりたい」
みたいな事言われるときがあるのですが他の人の開発環境はWindowsオンリーなので
「LinuxのsshでトンネルしてるだけだからWindowsでも出来ると思うよ?ググったら?」
って返してたんですが大体出来ずに何度も聞かれる羽目になるので
「私のIP:15432、私のIP:25432でアクセスして下さい。私が動かしてるときなら繋がります。」
って言う為に入れるようになりました。

終わりに

というわけで書きながら私以外に需要があるのか微妙な内容だと思いましたが
私の為の備忘録なのでまぁ良いかと思って書ききりました。

他にもCiphersの順序を変更したりしてましたがOSによって使える暗号違ってきたりするので書く必要もないかなとおもって省略したりしてます。

それでは皆さん

しゃみしゃっきり〜

P.S.

安物ラックマウントサーバが中華ノート並に壊れるって話で思い出した

昔某言語のシステムを違う言語にリプレースするっていう案件をやった事があって
その時検証用にそのシステムのコピーが入ったラックマウントサーバを渡されたんですがそれが安物ってレベルじゃないレベルで遅いので中身開けて見たら

ノートPC用の2.5incHDDが3.5incベイにガムテープで固定されてました😆

その時は爆笑したけど案の定炎上して案件ポシャったので上の人は笑えなかっただろうな自業自得だけど