アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

使えるとちょっと便利なSSHのTIPS

こんにちは、牧野です。久々の、9か月以上ぶりのブログです。。

仕事では、ここ1年近くずっっとインフラ関係のことをやっていました。
今日は、SSHに関するTIPSを紹介します。


1. 特定のサーバーにSSHログインする時に、特定の設定を使用する


ホームディレクトリ/.ssh/configファイルに設定を書いておくと、特定のサーバーにログインする時に、自動的に特定の設定を使うようにできます。
SSHのオプションをサーバーによって分けたい時に入力が楽になります。

以下は、xxx.yyy.zzz.aaaでアクセスする時に使う秘密鍵をid_rsa_testに設定しています。
.ssh/config


Host xxx.yyy.zzz.aaa
  IdentityFile /home/asial/.ssh/id_rsa_test


2. ホストキーをチェックしないようにする


LinuxからサーバーにSSH接続すると.ssh/known_hostsファイルにサーバーのホストキーが追加されます。新しいサーバーに接続する時は確認されるし、ホストキーがknown_hostsに記載のものと変わっていると接続できません。
このホストキーのチェックは、sshのオプションで無効にできます。


 ssh -o StrictHostKeyChecking=no server-name

これでknown_hostsを気にせずにアクセスできます。バッチ処理シェルスクリプト等でパスフレーズ無し秘密鍵を使用しているような時、役立つことがあるかもしれません。

3.SSHでログインした時に、指定したコマンドしか実行できないようにする


公開鍵認証の場合、サーバーにログインした時に特定のコマンドだけ実行して終了させることができます。
ログイン先のサーバーの(ホームディレクトリ)/.ssh/authorized_keys に、次のように記述します。


command="(実行したいコマンド)"[,オプション1,オプション2,...] (その人の公開鍵データ)
command="(実行したいコマンド)"[,オプション1,オプション2,...] (その人の公開鍵データ)
...

これで、鍵ごとに特定のコマンドを実行できます。例えば、以下のようなスクリプトを設置して設定すると、ユーザーがSSHログインした記録を全部残しておくことができます。

.ssh/logging.sh


#!/bin/bash
logger -p security.notice "Logged in $1 $2"

if [[ $SSH_ORIGINAL_COMMAND = "" ]];
then
  bash
else
  logger -p security.notice "Running $SSH_ORIGINAL_COMMAND"
  $SSH_ORIGINAL_COMMAND
fi


.ssh/authorized_keys


command="/home/asial/.ssh/logging.sh" ssh-rsa ... 


4.最初に使用した秘密鍵を使って別のサーバーにログインする


エージェントフォワード(エージェント転送)することで、一つ目のサーバーにログインした後に別のサーバーにログインする際、一つ目のサーバーにログインするのに使用している秘密鍵を使用することができます。1つ目のサーバーに秘密鍵ファイルを置く必要はありません。
エージェントフォワードを使うためには、クライアント側で準備が必要です。

puttyの場合
pageantプログラムを使います。pageantputtyと同じフォルダにインストールされているので、これを起動して秘密鍵を登録します。その後puttyで「接続」-> 「SSH」->「認証」の「エージェントフォワーディングを認める」をチェックしてから、サーバーにログインします。
  

Linuxの場合
ssh-agentコマンドを実行して出力されるスクリプトを実行後、ssh-addコマンドで秘密鍵をエージェントに追加します。


eval `ssh-agent` (もしくは、ssh-agent bash など)

ssh-add [秘密鍵ファイルのパス]

エージェントフォワードを有効にするには、-Aオプションをつけます。デフォルトでつけたい場合は、.ssh/configや/etc/ssh/ssh_configに
ForwardAgent yes
を書いておきます。

エージェントフォワードを使えるようにすると、2台目以降のサーバーにログインする時にパスフレーズ入力する必要がなくなります。また各サーバーには秘密鍵を設置せずに済みます。

5. 踏み台サーバーを経由して別のサーバーにログインする


sshのProxyCommandオプションを使うとできます。


ssh ユーザー名@ログインしたいサーバーIP -o 'ProxyCommand ssh 踏み台サーバーユーザー名@踏み台サーバーIP nc %h %p'


1と組み合わせて、.ssh/configに次のように書いておくと、オプションを入力せずに済みます。


Host ログインしたいサーバーIP
  ProxyCommand ssh 踏み台サーバーユーザー名@踏み台サーバーIP nc %h %p

nc (サーバーのIP) (ポート番号) で、指定したサーバーのポート番号に接続できます。
sshで踏み台サーバーにログインし、ncコマンドを実行する形になります。

以上、SSHのTIPSでした。当面は、インフラネタを書いていこうと思います。