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 を使用する方法
sshpass は ssh と一緒に使用されます。以下のコマンドを実行すると、すべての 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 の公開キー認証メカニズムを使用することを強くお勧めします。
さらに議論が必要な場合は、以下のフィードバック セクションに質問またはコメントを残してください。