.ssh/configの便利な設定【cloudpack 大阪 BLOG】

 管理するサーバ台数が増えてくるとSSHでの接続が手間になりconfigに設定を書くことも多くなると思います。
 また、扱うサーバ台数が増えてくるとそもそもconfigに記載したかどうかすらも分からなくなってきます。そこで今回は、「.ssh/config」を利用するときにちょっと便利になる設定を紹介します。

Host名の補完機能

 これはHost名を補完してくれる機能です。地味に便利な機能です。

インストール方法

 以下のコマンドを実行し補完機能をインストールしてください。
この機能はsshだけでなくserviceコマンドなど他のコマンド実行時においても補完してくれます。

# Mac
brew install bash-completion
# CentOs
yum --enablerepo=epel install -y bash-completion
使い方

ssh a」とタイプしたあとTabをタイプすると一致するHost名を表示します。
候補が複数ある場合は可能性のある一覧が表示されます。

$ ssh a<Tab>
$ ssh abc_web_01

Host名の一覧表示

 Host名の一覧を表示するコマンドを自作しました。補完機能でほぼまかなえますが、Host名の先頭のを覚えていない時に。
 以下のコマンドを「.bash_profile」なりに設定してください。

設定方法
alias sshlist="cat ~/.ssh/config |grep ^Host\  |sed -e 's/^Host\ //g'"
使い方

使い方は「sshlist」とするだけでHostの一覧が表示されます。

下記のようなconfig設定があったとして

Host abc_web_01
HostName 111.111.111.001
IdentityFile ~/.ssh/abc_id_rsa1
User ec2-user

Host def_web_01
HostName 111.111.111.002
IdentityFile ~/.ssh/def_id_rsa1
User ec2-user


これに対して実行すると

$ sshlist
abc_web_01
def_web_01

Host名に「def」を含む一覧を表示

$ sshlist |grep def
def_web_01

タイムアウト防止

一定時間操作しなかった場合にタイムアウトすることがありますが、以下の設定をすると
指定時間時間ごとに通信をしてタイムアウトを防いでくれます。

ServerAliveInterval 15

サーバのタイムアウト設定は基本的にはセキュリティを考慮したもののため、
この設定をして回避するのは微妙な気がします。

おまけ

scpコマンドからでも.ssh/configが利用できます。

ファイル受信
scp  abc_web_01:/home/user/remotefile.txt /tmp/ 
ファイル送信
scp  localfile.txt abc_web_01:/home/user/