SSHが日々の作業に必須の人も少なくないと思います。
SSHオプションはコマンドでも指定できますが、
毎日、何度もタイプすることを思えば configファイルで指定できれば便利ですよね。
初歩的なものから、ちょっと凝ったものまで紹介します。
.ssh/config ファイル
SSHオプションをまとめて指定できます。
システムの設定
/etc/ssh/ssh_config を読み込んだ後、
ユーザー毎の設定
~/.ssh/config を読んで上書きされます。
全ホスト共通の一般設定のほか、ホスト毎の個別設定もできます。
はじめに下記のようにしてシステムの設定ファイルを
自分のユーザー領域にコピーして使うと良いと思います。
(デフォルト/システムの設定値がわかる、オプションの名前がわかるなどメリットがある)
1 |
$> cp /etc/ssh/ssh_config ~/.ssh/config |
X転送
SSH接続先からXが転送できない場合は以下を追加する。
1 2 |
ForwardX11 yes ForwardX11Trusted yes |
上記オプションを .ssh/config の "Host *" 下に追加する。
# Trusted まで全ホストに対し yes とするのは原理的にはセキュリティ上云々あるが、
# 実運用上はこうしておくのが良いと思う。
ホスト毎の設定
よくありそうなホスト毎の設定を紹介する。
1 2 3 4 5 |
Host myserver HostName hogehoge.net User username Port 22222 IdentityFile ~/.ssh/id_rsa |
このような設定を書くと、
ssh myserverで上記の設定が反映された状態でアクセスできる。
各オプションの意味は、
- HostName: 実際のホスト名 or IPアドレス
- User: ユーザー名
- Port: ポート番号(デフォルト22以外を使用の場合)
- IdentityFile: 鍵認証をしている場合、秘密鍵の場所
という訳で、
1 |
$> ssh myserver |
と打てば、以下と同じ意味になる。
1 2 |
$> ssh -i ~/.ssh/id_rsa username@hogehoge.net:22222 $> ssh -i ~/.ssh/id_rsa -l username -p 22222 hogehoge.net |
Port Forwarding: ポート転送
例えばVNCによる画面転送など、毎回決まったポートを転送したい時に指定しておくと便利。
ローカルフォワード
例:ローカルのポート25900 から(ファイアウォール内の)xxxx.jp のポート5900 に繋ぎたい場合。
1 |
LocalForward 25900 xxxx.jp:5900 |
これは以下と同じ。
1 |
$> ssh -L 25900:xxxx.jp:5900 ... |
リモートフォワード
これはローカルフォワードと逆で、SSH先のポートから自分 or 他所に引っ張ってくる感じ。
意図的に"穴"を開けることになるので、使う(使える)場面は限られているかもだけど。
1 |
RemoteForward 25900 localhost:5900 |
これは以下と同じ。
1 |
$> ssh -R 25900:localhost:5900 ... |
ダイナミックフォワード
接続するSSHサーバーをSOCKS Proxyにできる。
SOCKS Proxyとしてブラウザ等に正しく設定してやると、
ブラウザからの接続が全てSSHサーバー経由になる。
1 |
DynamicForward 1080 |
これは以下と同じ。
1 |
$> ssh -D 1080 ... |
踏み台(アクセスサーバー)経由のSSH
踏み台を経由してアクセスしたいサーバー設定に以下を追加する。
(場合によっては
-w 6000msとしないとダメかも)
1 |
ProxyCommand ssh xxxx.net nc -w 6000 %h %p |
ProxyCommand に渡すsshのサーバーアドレスは設定ファイルで指定した名前でも良いので、
1 2 3 4 5 6 7 8 9 |
Host accsrv HostName access.server.com User hoge Port 22222 IdentityFile ~/.ssh/id_rsa Host worksrv HostName work.server.com ProxyCommand ssh accsrv -w 6000 %p %h |
という風にも指定できる。
ポイントは ProxyCommand には accsrv という名前だけを指定していて、
その実態はさらに上部で別途一括設定しておくということができる。
同じ踏み台を経由して何箇所か異なるサーバーにアクセスしたい時には有用。
新し目のSSH環境(>7.3?)では
ProxyJump accsrv が代わりに使えそう。
汎用踏み台設定
一つ上で紹介した踏み台設定は、
踏み台経由でアクセスしたいサーバーがいくつかに限定されている時は有用だが、
いろんな踏み台からネットワークに入って、
その先のいろんなサーバーにアクセスしたいとなると、
その数だけ設定を増やさないといけなくなる。
もう少し汎用的に使えそうな設定を紹介。
(情報元:最強のSSH踏み台設定)
1 2 3 4 5 |
# 最強のSSH踏み台設定 http://bit.ly/1MD3d24 Host */* ProxyCommand ssh -W "$(basename "%h")":%p "$(dirname "%h")" Host *+* ProxyCommand ssh -W "$(sed -E 's/.*\+//'<<<"%h")":%p "$(sed -E 's/\+[^\+]*//'<<<"%h")" |
詳しくは情報元を見てもらえると良いが、
1 2 |
$> ssh accsrv/worksrv2 $> ssh accsrv+worksrv2 |
というように書けるようになるので、あちこちに繰り返し出入りしたり、
或いはスクリプトやrsync なんかで使いたい時には便利。
複数のSSHセッションで1つのコネクションを使い回す
一つのSSHで作業をしていて、
何らかの理由で別窓から同じ環境に入り直すような経験はないでしょうか?
以下のように設定しておくと、既存の接続を経由して繋ぐので、
パスワードやパスフレーズも不要で応答も早いです。
1 2 3 |
ControlMaster auto ControlPath ~/.ssh/mux-%r@%h:%p ControlPersist 10 |
その他
Ciphers
暗号化のタイプを指定。
暗号強度の弱い方式を外して、強い方式を優先させたり、
逆に負荷の軽い(〜暗号強度の弱い)方式を選択して scp/sftp 転送速度を稼いだり。
特に後者の使い方には色々注意が必要で、
暗号化強度を下げるということはリスクを負うことを確実に意識して、
スループットの出やすい(+信頼できる)ローカルネットワークなどで利用してください。
もう一つは最近のCPUは様々な拡張命令を持っていて、
AES-NIの実装により AES系の処理は格段に速くなりました。
これにより 暗号化強度 が必ずしも 暗号化負荷とリンクしません。
比較的新しい環境では下手に arcfour などを選ぶより、
AES系を用いた方が安全で速いなんてことも起こりうるのでご注意あれ。
CheckHostIP
GitHub のような git repository など、同じホスト名で実際に繋がるIPが変わる場合は、 CheckHostIP noとしておくと、known_hosts に IPが記録されなくなります。