ウェブサイト検索

sshpass: 非対話型 SSH ログインのための優れたツール - 本番サーバーでは決して使用しないでください


ほとんどの場合、Linux システム管理者は、パスワードを入力するか、パスワードなしの SSH ログイン、またはキーベースの SSH 認証を使用して、SSH を使用してリモート Linux サーバーにログインします。

SSH プロンプト自体にユーザー名とともにパスワードを指定したい場合はどうすればよいでしょうか?ここでsshpass が役に立ちます。

sshpass はシンプルで軽量のコマンド ライン ツールで、コマンド プロンプト自体にパスワード (非対話型パスワード認証) を提供できるため、自動化されたシェル スクリプトを実行して cron スケジューラ経由でバックアップを取得できます。

ssh は直接 TTY アクセスを使用して、対話型キーボード ユーザーによってパスワードが実際に入力されていることを確認します。 Sshpass は専用の tty で ssh を実行し、対話型ユーザーからパスワードを受け取っていると誤解させます。

重要: sshpass の使用は、単純な コマンド ラインですべてのシステム ユーザーにパスワードを公開してしまうため、安全性が最も低いと考えられています。 「ps」コマンド。 SSH パスワードレス認証を使用することを強くお勧めします。

Linux システムに sshpass をインストールする

RedHat/CentOS ベースのシステムでは、まず、システム上の Epel リポジトリを有効にして、示されているように yum コマンドを使用してインストールする必要があります。

yum install sshpass
dnf install sshpass    [On Fedora 22+ versions]

Debian/Ubuntu およびその派生製品では、次のように apt-get コマンドを使用してインストールできます。

sudo apt-get install sshpass

あるいは、ソースからインストールして最新バージョンの sshpass を使用することもできます。まずソース コードをダウンロードし、tar ファイルの内容を抽出して次のようにインストールします。

wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.06
./configure
sudo make install 

Linux で sshpass を使用する方法

sshpassssh と一緒に使用されます。以下のコマンドを実行すると、すべての sshpass 使用オプションと詳細な説明を表示できます。

sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

前に述べたように、sshpass はより信頼性が高く、スクリプト作成に役立ちます。以下のコマンド例を検討してください。

ユーザー名とパスワードを使用してリモート Linux ssh サーバー (10.42.0.1) にログインし、図に示すようにリモート システムのファイル システムのディスク使用量を確認します。

sshpass -p 'my_pass_here' ssh [email  'df -h' 

重要: ここでは、コマンド ラインでパスワードを指定していますが、これは事実上安全ではないため、このオプションの使用はお勧めできません。

ただし、画面にパスワードが表示されないようにするには、次のように -e フラグを使用し、SSHPASS 環境変数の値としてパスワードを入力します。

export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh [email  'df -h' 

: 上記の例では、SSHPASS 環境変数は一時的な目的のみであり、再起動時に削除されます。

SSHPASS 環境変数を永続的に設定するには、/etc/profile ファイルを開き、ファイルの先頭に次のエクスポート ステートメントを入力します。

export SSHPASS='my_pass_here'

ファイルを保存して終了し、以下のコマンドを実行して変更を有効にします。

source /etc/profile 

一方、-f フラグを使用して、パスワードをファイルに入れることもできます。これにより、次のようにファイルからパスワードを読み取ることができます。

sshpass -f password_filename ssh [email  'df -h'

次のように、sshpass を使用して、scp を使用してファイルを転送したり、SSH を使用して rsync 経由でファイルをバックアップ/同期したりすることもできます。

------- Transfer Files Using SCP ------- 
scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

さらに詳しい使用法については、sshpass のマニュアル ページを読んで、次のように入力することをお勧めします。

man sshpass

この記事では、 非対話型のパスワード認証を可能にするシンプルなツールであるsshpass について説明しました。このツールは役立つかもしれませんが、より安全な ssh の公開キー認証メカニズムを使用することを強くお勧めします。

さらに議論が必要な場合は、以下のフィードバック セクションに質問またはコメントを残してください。