SSHパスワードの自動化

ssh

Hetemlのように、鍵を使用せずにパスワードのみでSSH接続する場合に、パスワードをいちいち入力しなくて済むようにするためのメモ。

ローカルの秘密鍵を開くためのパスフレーズは別の方法じゃないとできないので今回はパス。

 

sshpassをインストール

sudo apt update
sudo apt install -y sshpass

 

.bashrcに条件分岐のコードを記入

# --- smart-ssh wrapper (.sshpass ファイル版) ---
ssh() {
  if [ $# -eq 0 ]; then
    command ssh
    return
  fi
  local host="$1"; shift
  local pwfile="$HOME/.sshpass/$host.pw"

  if [ -f "$pwfile" ]; then
    local PW
    PW="$(cat "$pwfile")"
    SSHPASS="$PW" sshpass -e ssh \
      -o PubkeyAuthentication=no \
      -o PreferredAuthentications=password \
      "$host" "$@"
    unset PW SSHPASS
  else
    command ssh "$host" "$@"
  fi
}
# --- end ---

 

source ~/.bashrc

 

専用のディレクトリを作成して、そこにホストごとのパスワードが記載されたファイルを保存。
パーミッションは600にする。

mkdir -p ~/.sshpass && chmod 700 ~/.sshpass
echo 'パスワード' > ~/.sshpass/my-host.pw
chmod 600 ~/.sshpass/my-host.pw

 

これで、.ssh/configに書かれているホスト名でログインできるようになる。

ssh hostname

 

これで動かない場合は、「接続先の信頼確認」で止まっている可能性が大。

その場合、known_hostsに追加するために以下を実行。

ssh -o StrictHostKeyChecking=accept-new hostname

パスワードを求められるので、パスワードを入力してログイン。

これでknown_hostsに登録されるので次回以降、自動でログインできる。

 

もしくは、.ssh/configのホスト設定に、StrictHostKeyChecking accept-new を追加すれば完全自動化できる。

 

Host hostname
HostName ssh-*****.heteml.net
User ****
Port 2222
StrictHostKeyChecking accept-new