ローカルのマシンとリモートサーバーでEmacsの設定ファイル(~/.emacs.d/init.el)を同期したいことがあったので、スクリプトを書いてみました。
基本はscpとsshを続けてやっているだけですが、
- SSHのログインはキーボードインタラクティブ認証
- scpとsshで2回同じパスワードを入力するのは面倒
ということでSSHPassを利用していますが、平文でパスワードを入力するのは心許ないので少し工夫しています。
#!/bin/bash
HOST="user@hostname" #リモートのホスト名(とユーザー名)
FILE="/home/UserName/.emacs.d/init.el" #同期するファイル
DIR="~/.emacs.d/" #同期先のディレクトリ
read -sp "Password: " pass
tty -s && echo
sshpass -p $pass scp $FILE $HOST:$DIR &
sshpass -p $pass ssh $HOST
scp -r
を使えばディレクトリごと同期もできるはずです。
ちなみにFILE
のパスを~/.emacs.d/init.el
にすると、なぜかNo such file or directoryが出てうまく行きませんでした。
フルパスを明示することで解決しましたが、理由がわからないとなんだか気持ちが悪いので、もしお分かりの方がいたらぜひ教えていただけるとありがたいです……
パスを""で囲んだためにbashが展開してくれなかったからですね