SSH 接続のパスワード入力を自動化するシェルスクリプトを作ってコマンド化した

MacOS にて実施。

SSH 接続する際、とある理由で公開鍵認証方式が使えず、sshpass という便利なツールも導入できなかったので、他の方法でパスワード入力を自動化する方法を調べた。

expectspawnsend コマンドで作れる!

結論からいうと、以下のようなシェルスクリプトを作れば、SSH 接続とパスワード入力を自動化できる。

#!/bin/sh

expect -c "
set timeout 5
spawn ssh -p 22 【ユーザ名】@【接続先 URL】
expect \"Password:\"
send \"【パスワード文字列】\n\"
interact
"

というワケ。

こんなファイルを ~/myssh.sh に保存して、$ sh ~/myssh.sh という風に実行してやれば、自動 SSH ログインできるようになった。

コマンド化する

これだけでもだいぶ楽になったが、毎回 $ sh ~/myssh.sh とタイプするのは面倒だ。そこで、自作コマンドとして動作するようにする。

まずは PATH を確認する。最初から /usr/local/bin などに PATH が通っていると思うのでココに置いても良いが、今回はユーザホームの ~/bin/ 配下に自作コマンドを置きたいので、~/.bash_profile にて PATH を追加する。

# ~/.bash_profile
export PATH=~/bin:$PATH

このようにすると、~/ が展開されてユーザホームのフルパスを示すようになる。

$ echo $PATH
/Users/Neo/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

# 最初の「/Users/Neo/bin」がコレ。

編集後は $ . ~/.bash_profile で再読込する (ピリオド .source コマンドと同じ)。

次に、先程作った myssh.sh~/bin/ 配下に移動し、名前を拡張子なしの myssh にリネームする。

リネームできたら、コマンドラインから以下の要領で全ユーザに実行権限を付ける。

$ chmod a+x ~/bin/myssh

ココまでできたら完成。以降は $ myssh と打つだけで自動 SSH ログインできるようになる。やったぜ。

参考文献

sshpass については以下などを参照のこと。