ずっと昔にオライリーの「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パターンあるので、両方ともご紹介します。
- AWSやAzure等、相手から秘密鍵を提示された場合
- 手元環境でキーペアを作成して対象サーバに公開鍵を送付する場合
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でデスクトップショートカットから対象サーバにオートログインする小手先テクニック」もご参照ください。