0.はじめに
サーバーへの SSH 接続に、Chrome 使ったり、Cyberduck 使ったりしてたんですが…、
Chrome のキャッシュが飛んで、接続情報が無くなってしまったり…、
Cyberduck がたまに使えなくなったりと…、
何か色々と困った事が起きたので…、基本に戻ってシェル使おうかなと思って作ってみました。
1.事前準備
※特に無し。
2.プログラム
- SSH 接続プログラム (.command)
SshConnect.command
#!/bin/bash
MyBase=`dirname ${0}`
# bashのshellで2次元配列を使ってHTMLのテーブルを作る方法 - Qiita
# https://qiita.com/ponsuke0531/items/86df8752d8a4c4e9ca92
dataArray=(
#TiTle #Host #Port #User #Identifier #Password
"'タイトル' 'ホスト' 'ポート' 'ユーザー' '鍵ファイルパス' 'パスワード'"
"'XXXXXXXX' 'XXX.XXX.XXX.XXX' 'XXXXX' 'XXXXXXXX' '/XXXX/XXXX/XXXX.pem' 'XXXXXXXX'"
)
OLDIFS=${IFS}
IFS=$'\n'
for i in "${dataArray[@]}"; do
IFS=$'\''
DATA=(${i[@]})
TITL=${DATA[1]}
HOST=${DATA[3]}
PORT=${DATA[5]}
USER=${DATA[7]}
FILE=${DATA[9]}
PSWD=${DATA[11]}
REC=`printf "%-24.24s %-32.32s %-8.8s %-16.16s %s" ${TITL} ${HOST} ${PORT} ${USER} ${FILE}`
LIST="${LIST}\n${REC}"
done
IFS=$'\n'
PS3="What do you use ? >"
select ANS in `echo -e "${LIST}"`
do
IFS=${OLDIFS}
if [ -z "${ANS}" ]; then
continue
else
break
fi
done
echo
IFS=$'\''
DATA=(${dataArray[$((REPLY-1))]})
TITL=${DATA[1]}
HOST=${DATA[3]}
PORT=${DATA[5]}
USER=${DATA[7]}
FILE=${DATA[9]}
PSWD=${DATA[11]}
IFS=${OLDIFS}
PS3="SSH or SFTP ? >"
select ANS in "SSH" "SFTP"
do
if [ -z "${ANS}" ]; then
continue
else
break
fi
done
echo
CMD=""
case "${REPLY}" in
"1" ) CMD="ssh -oStrictHostKeyChecking=no -oPort=${PORT}" ;;
"2" ) CMD="sftp -oStrictHostKeyChecking=no -oPort=${PORT}" ;;
esac
if [ -n "${FILE}" ]; then
CMD+=" -oIdentityFile=\"${FILE}\""
fi
CMD+=" ${USER}@${HOST}"
# Linuxコマンド【 sftp 】安全なファイル転送 - Linux入門 - Webkaru
# https://webkaru.net/linux/sftp-command/
# シェル以外からexpectしててハマったメモ - blog::wnotes.net
# https://blog.wnotes.net/posts/expect-other-programs/
expect -c "
set timeout 5
spawn env LANG=C ${CMD}
expect -re \"Enter passphrase for key\" {
send \"${PSWD}\r\"
} expect -re \".* password:\" {
send \"${PSWD}\r\"
}
interact
"
3.設定
- .bash_profile
.bash_profile
alias sshconnect='〜〜〜/SshConnect.command'
99.ハマりポイント
- シェルでの文字列の扱いでちょっと困ったぐらいかな。
XX.まとめ
これで、コマンド打てばシェルに登録されているホストへ、SSH も SFTP のどちらでも接続できる様になりました。
セキュリティ的に不安があれば、以下のコマンドを利用してキーチェーンからパスワードを取得するのもいいんじゃないかと思います。
良かったら使ってみて下さい。
それでは♪