サーバのIPアドレス入れ換えた時のSSH再接続

 サーバーのIPアドレスを入れ換えるなんて普段は無いのですが、ハードウェア障害によるサーバ交換を行った時に気をつけなければならないのはSSHが弾かれてしまうこと。
Windowsクライアントならサーバが代わろうが警告が出ようが新しいキーを上書きして続行できるのですがLinux同士だと、一旦known_hostsの情報を削除する必要がありました。
で、これだけknown_hosts自体を削除しそうですが、SSHの接続先が複数あるときは後でknown_hostsを再生成する手間が掛かるので、該当行だけを削除します。
viでdd打てばそれで終わりですが、もっと安全な方法が無いかと探したらありました。
参考:
OpenSSH : WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

http://futuremix.org/2007/08/openssh-warning

ssh-keygen -F [IPアドレス]
で検索して
ssh-keygen -R [IPアドレス]
で削除
これは簡単。

sshでnfsっぽい事ができるsshfs

これは使えるかも。UNIX同士でファイル共有するのは私の周りではサーバー間のコンテンツ共有(Apacheは分散するけどユーザコンテンツは一箇所にするとかの場合)にnfs使ったりしていますが、これが後で負荷が増えたからという理由でウェブサーバー追加しても、データセンター上で別ラックになってLANは無理ですなんて事もある。そういうときの最終手段として暗号化nfsはいいかも。

sshでリモートサーバーをマウント、便利にsshfs – Unix的なアレ
http://d.hatena.ne.jp/wadap/20080603/1212506793

SSH接続の効率化

この前からTeraTermMenuの古い日本語版をカスタマイズしてコンパイルし使っていましたが、UTF版TeraTermには英語版の最新TeraTerm Menuが入ってました。それだけなら特に他の方法でやってみようという気にならなかったのですが、多段ログインのマクロを組んでいるときにヘルプを見たら…。普通にマクロの拡張子をTeraTermMacroに登録して利用できるようです。つまりマクロファイルダブルクリックでOKということなのでこれをスタートメニューとかクイック起動バーに登録すればTeraTermMenuは使わなくても良かったということです。

まずはwheelグループに属しているユーザでログインしsuでルートになる方法
username = ‘username’
hostname = ‘192.168.100.100’
password = ‘userpassword’
supass = ‘supassword’
ini = ‘black_euc.ini’
timeout = 30
msg = hostname
strconcat msg ‘:22 /ssh /auth=password ‘
strconcat msg ‘/user=’
strconcat msg username
strconcat msg ‘ /passwd=’
strconcat msg password
strconcat msg ‘ /f=’
strconcat msg ini
connect msg
pause 2
sendln ‘su -‘
wait ‘Password:’
sendln supass

iniの項目でカスタマイズしたiniファイルを定義します。これはサーバーによって扱っているロケールの文字コードが違う為文字コード別にiniファイルを作成しています。あとはDevelop/Staging/Publicで背景色と文字色を変えてサーバの取り違いミスを予防します。接続の後のpauseはサーバーの応答を待たずにsuコマンドを発行しないようにマクロ側を一時停止します。その後のwaitはサーバーからの応答を待ってパスワードを送信します。timeoutはwait用の値です。

上記はパスワード認証用ですが、次は公開鍵を使って1台目のサーバに接続しさらに他のサーバへsshへログインする方法です。(これはグローバルIPを持たないデータベース専用サーバ等でよく利用します)

username = ‘username’
hostname = ‘192.168.100.100’
password = ‘userpass’
key = ‘id_rsa’
rlhost = ‘192.168.100.101’
rluser = ‘rluser’
rlpass = ‘rlpass’
ini = ‘black_euc.ini’
msg = hostname
strconcat msg ‘:22 /ssh /auth=publickey ‘
strconcat msg ‘/user=’
strconcat msg username
strconcat msg ‘ /passwd=’
strconcat msg password
strconcat msg ‘ /keyfile=’
strconcat msg key
strconcat msg ‘ /f=’
strconcat msg ini
connect msg
pause 2

msg = ‘ssh -l ‘
strconcat msg rluser
strconcat msg ‘ ‘
strconcat msg rlhost
sendln msg
wait ‘Password:’
sendln rlpass

そして作成したマクロファイルをダブルクリックで起動できるように定義します。

WindowsXPでの登録方法
1.エクスプローラーの[ツール(T)]-[フォルダ オプション(O)]からファイルの種類タブをクリック。
2.[新規(N)]をクリック。
3.ファイル拡張子(F)の欄に「.ttl」と入力して[OK]をクリック
4.TTLファイルが登録されたら、「拡張子’TTL’の詳細」グループ内の[詳細設定(V)]ボタンをクリック。
5.一番上のテキスト入力は拡張子の種類に入る説明なので「Tera Term macro files
」と入力。
6.[アイコンの変更(I)]をクリックして好きなアイコンを選択。TeraTerm系のアイコンにしたい場合は[参照(B)]よりTeraTermのインストールされているフォルダへ参照しTeraterm実行ファイルの中から選択する。
7.[新規(N)]をクリックしアクションに「接続」と入力。実行するアプリーションは[参照(R)]でTeraTermマクロ実行ファイルを選択。この時%1が追加で挿入されるがダブルクォートで囲んで[OK]をクリック。
例) “C:Program Filesteratermttermpro.exe” “%1”
8.ついでに[新規(N)]でもうひとつ登録。アクションは「編集」でアプリケーションはTTLEditを選択する。
9.既定は「接続」になっていることを確認して[OK]をクリック。最後に[閉じる]をクリックして終了。

TTLEditはTeraTermマクロに特化したエディタで色分けもされているのでとても便利です。