雑記帳

整理しない情報集

更新情報

OpenSSHのパスワード入力を省略する

公開日:

カテゴリ: 開発

主に開発環境でのバッチ実行向けに、OpenSSHのパスワード入力を省略する方法を紹介します。

ご注意

本記事での方法は安全性の低い内容であるため、万が一パスワードが漏洩しても問題が発生しない開発環境向けの方法となっています。本番環境などの重要なシステムでの使用は避け、パスワードマネージャや公開鍵認証を使いましょう。

OpenSSH

OpenSSHのコマンド(SSHやSCPなど)では、引数やパイプラインでパスワードを渡して入力するような機能はありません。

代わりに、コマンドを実行してその結果をパスワードとして入力する機能があるため、それを使って無理矢理実現させます。おそらくこの機能の本来の目的は、GUI環境の裏側でSSHやSCPを実行した際(TTYがない状態)にパスワードの入力ウィンドウを画面上に表示させるためのもののようです。

方法

パスワードを標準出力するスクリプトを作成

まずはパスワードのみを標準出力するスクリプトを作成します。Linux/Mac/WSLではシェルスクリプト、Windowsではbatファイルです。

Windows

@echo off
echo パスワード

Linux/Mac/WSL

#!/bin/sh
echo パスワード

Linux/Mac/WSLの場合、作成したら実行権限を付与しておきます。

chmod +x シェルスクリプトのパス

環境変数の設定

次に環境変数を設定します。SSH_ASKPASSに先ほど作成したパスワードを返すスクリプトのパス、SSH_ASKPASS_REQUIREforceを指定します。

Windows

set SSH_ASKPASS=バッチファイルのパス
set SSH_ASKPASS_REQUIRE=force

Linux/Mac/WSL

SSH_ASKPASS=シェルスクリプトのパス
SSH_ASKPASS_REQUIRE=force

以上で準備は完了です。

あとは通常通りsshコマンドやscpコマンドを実行すると、パスワードのプロンプトが表示されることなくコマンドが実行されます。

その他

SSH_ASKPASS_REQUIRE

以下のオプションが指定可能です。

  • none(デフォルト): SSH_ASKPASSを使用しない(TTYから入力)
  • prefer: TTYよりもSSH_ASKPASSを優先して使用する
  • force: SSH_ASKPASSを強制的に使用する

カテゴリ: 開発