サーバ名指定で公開鍵認証を用いて自動ログインするssh-toスクリプト

ずっと昔にオライリーの「LINUXサーバHACKS」にあった1行スクリプトssh-toと言うのが便利でずっと使っていました。そのうち、AWSや各種VPS等、サーバ側から公開鍵を指定されることが多くなり、改良利用していたssh-toスクリプトが結構便利なのでご紹介させて頂きます。

使用例としては、以下のようになります。

使用例のご紹介

# ローカルのサーバから、接続したいサーバ名をタイプするだけ
~$ myserver.local

# myserver.localに自動的に公開鍵認証でSSH接続される。認証で何か聞かれることは無い。
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-27-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri May  6 01:37:44 PM JST 2022

  System load:                      0.0048828125
  Usage of /:                       21.4% of 48.91GB
  Memory usage:                     31%
  Swap usage:                       25%
  Processes:                        163


# ローカルのサーバから、リモート実行したいコマンドを指定する。例えばdf
~$ myserver.local df

Filesystem     1K-blocks     Used Available Use% Mounted on
tmpfs             202464     1164    201300   1% /run
/dev/vda3       51290592 10998384  37654384  23% /
tmpfs            1012304        0   1012304   0% /dev/shm
tmpfs               5120        0      5120   0% /run/lock
/dev/vda2        5074592   127672   4668392   3% /boot

結構便利だと思っているのですが、いかがでしょうか?

続いて、ssh-toスクリプトの準備方法をご紹介します。

ssh-toスクリプトの準備とパス通し

ssh-toスクリプトは、ローカルとリモートで同じユーザー名である前提なので、${USER}でログイン中ユーザー名を取っていますが、その個所をハードコーディングして、「${USER}」を「tarou」等、直接ユーザー名を入れてもOKです。

mkdir ~/ssh-to
cd ~/ssh-to

echo 'ssh -i ~/.ssh/`basename $0` ${USER}@`basename $0` $*' > ssh-to
chmod +x ssh-to

# .bashrcにパス設定を追加してログイン時にパスを通す
echo 'export PATH="$PATH:~/ssh-to"' >> ~/.bashrc

ln -s ssh-to test.local

サーバ毎にユーザー名が違う場合の例は本投稿の最後に記載しておきます。

新しいホストが増えた際の公開鍵作成と、ssh-toへのシンボリックリンク作成

2パターンあるので、両方ともご紹介します。

  1. AWSやAzure等、相手から秘密鍵を提示された場合
  2. 手元環境でキーペアを作成して対象サーバに公開鍵を送付する場合

1.AWSやAzure等、相手から秘密鍵を提示された場合

# ~/.sshに秘密鍵をホスト名で格納(viで秘密鍵を記載してください)
export TARGET=myserver.local
vi ~/.ssh/${TARGET}

# ssh-toへシンボリックリンク作成
cd ~/ssh-to; ln -s ssh-to ${TARGET}

2.手元環境でキーペアを作成して対象サーバに公開鍵を送付する場合

cd ~/

~$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): myserver.local
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in myserver.local
Your public key has been saved in myserver.local.pub
The key fingerprint is:
SHA256:pLP3neWiQ0gn1ZjQ0caYhKcAbn+F8XK+AFEeswBJyZI user@host
The key's randomart image is:
+---[RSA 4096]----+
|    .=o+=**X     |
|   .E = .BO+=    |
|    o. .=+*.     |
|   . . o+*.      |
|      +.S+.      |
|       +....     |
|      . ...   .  |
|       . ....+   |
|          ooo..  |
+----[SHA256]-----+

# 自身で相手先に公開鍵を置いて、ssh-toへシンボリックリンクをはる
~$ TARGET=myserver.local; \ 
    mv ${TARGET} ~/.ssh/; \
    ssh-copy-id -i ${TARGET}.pub ${USER}@${TARGET} \
    cd ~/ssh-to; ln -s ssh-to ${TARGET}

ワンポイント

リモートサーバ毎にログインユーザーが異なる際は、ssh-toのファイル名をサーバ名として、ユーザー名をハードコーディングした状態で作成するのも便利でした。

TARGET=myserver.local; \
  echo 'ssh -i ~/.ssh/basename $0 tarou@basename $0 $*' > ${TARGET}; \
  chmod +x ${TARGET}

最後に

以前はオライリーから「~~~HACKS」と付く本が発行されており、単純に「あ。このテクニック良いな!」とウキウキしながら見ていたのですが、最近は「~~~HACKS」は出してくれないのですね。「Linuxサーバ Hacks 2」は出ていましたが、それでも2006年出版なのですね。

最近のソフトウェアバージョンではないからと言う事なのか、「Linuxサーバ Hacks 」、「Linuxサーバ Hacks 2」共に中古品であれば数百円から出品されていますが、中にはOSバージョンが上がっても継続利用できる内容も多々あるので、持っていなかったHacks2の方は売り切れる前に発注してみました。

Windows版として「puttyでデスクトップショートカットから対象サーバにオートログインする小手先テクニック」もご参照ください。

ブックマーク パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください