[編集者注、2021年11月29日:コマンドラインでパスワードを提供するすべての例には、パスワードがユーザーのシェル履歴(サポートされている場合)にキャプチャされるか、プロセスリストのすべてのシステムユーザーに表示されるリスクが含まれます。セキュリティの専門家は、すべてのファイルを削除してシェルログをクリアすることをお勧めします。]
リモートシステムへのファイルの接続と転送は、システム管理者が常に行うことです。 Linuxプラットフォームの多くのシステム管理者が使用する重要なツールの1つは、SSHです。 SSHは、次の2つの認証形式をサポートしています。
- パスワード認証
- 公開鍵認証
公開鍵認証は、これら2つの方法の中で最も安全な形式と見なされていますが、パスワード認証が最も一般的で最も簡単です。ただし、パスワード認証では、ユーザーは常にパスワードの入力を求められます。この繰り返しは退屈です。さらに、SSHをシェルスクリプトで使用する場合は、手動による介入も必要です。 SSHパスワード認証を使用するときに自動化が必要な場合は、sshpass
と呼ばれるシンプルなツール 不可欠です。
sshpassとは何ですか?
sshpass
ユーティリティは、 Keyboard-interactiveを使用してSSHを実行するように設計されています パスワード認証モードですが、非対話型の方法です。
SSHは、直接TTYアクセスを使用して、パスワードが実際に対話型キーボードユーザーによって発行されていることを確認します。 sshpass
専用のTTYでSSHを実行し、SSHをだまして、対話型ユーザーからパスワードを取得していると思い込ませます。
sshpassをインストールする
sshpass
をインストールできます この簡単なコマンドで:
# yum install sshpass
sshpassを使用する
sshpass
の後に実行するコマンドを指定します オプション。通常、コマンドはssh
です。 引数付きですが、他のコマンドにすることもできます。ただし、SSHパスワードプロンプトは現在、sshpass
にハードコードされています。 。
sshpass
の概要 コマンドについては以下で説明します:
sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
場所:
-ppassword
The password is given on the command line.
-ffilename
The password is the first line of the file filename.
-dnumber
number is a file descriptor inherited by sshpass from the runner. The password is read from the open file descriptor.
-e
The password is taken from the environment variable "SSHPASS".
例
sshpass
の価値と使用法をよりよく理解するため 、SSH、Rsync、Scp、GPGなどのいくつかの異なるユーティリティを使用したいくつかの例を見てみましょう。
例1:SSH
sshpass
を使用する SSHを使用してリモートサーバーにログインします。パスワードが!4u2tryhack
であると仮定しましょう 。以下は、sshpassオプションを使用するいくつかの方法です。
A. -p
を使用してください (これは最も安全性の低い選択肢と見なされているため、使用しないでください):
$ sshpass -p !4u2tryhack ssh [email protected]
-p
シェルスクリプトで使用する場合、オプションは次のようになります。
$ sshpass -p !4u2tryhack ssh -o StrictHostKeyChecking=no [email protected]
B. -f
を使用します オプション(パスワードはファイル名の最初の行である必要があります):
$ echo '!4u2tryhack' >pass_file
$ chmod 0400 pass_file
$ sshpass -f pass_file ssh [email protected]
$ chmod 0400 pass_file
パスワードファイルのセキュリティを確保するために重要です。 RHELのデフォルトのumaskは033です。これにより、ファイルを世界中で読みやすくすることができます。
これが-f
です シェルスクリプトで使用する場合のオプション:
$ sshpass -f pass_file ssh -o StrictHostKeyChecking=no [email protected]
C. -e
を使用します オプション(パスワードはファイル名の最初の行である必要があります):
$ SSHPASS='!4u2tryhack' sshpass -e ssh [email protected]
-e
シェルスクリプトで使用する場合のオプションは次のようになります:
$ SSHPASS='!4u2tryhack' sshpass -e ssh -o StrictHostKeyChecking=no [email protected]
例2:Rsync
sshpass
を使用する rsync
を使用 :
$ SSHPASS='!4u2tryhack' rsync --rsh="sshpass -e ssh -l username" /custom/ host.example.com:/opt/custom/
上記は-e
を使用しています オプション。パスワードを環境変数SSHPASSに渡します。
-f
を使用できます このように切り替えます:
$ rsync --rsh="sshpass -f pass_file ssh -l username" /custom/ host.example.com:/opt/custom/
例3:Scp
sshpass
を使用する scp:
を使用
$ scp -r /var/www/html/example.com --rsh="sshpass -f pass_file ssh -l user" host.example.com:/var/www/html
例4:GPG
sshpass
を使用することもできます GPGで暗号化されたファイルを使用します。 -f
の場合 スイッチが使用され、参照ファイルはプレーンテキストです。 GPGでファイルを暗号化して使用する方法を見てみましょう。
まず、次のようにファイルを作成します。
$ echo '!4u2tryhack' > .sshpasswd
次に、gpg
を使用してファイルを暗号化します コマンド:
$ gpg -c .sshpasswd
平文を含むファイルを削除します:
$ rm .sshpasswd
最後に、次のように使用します。
$ gpg -d -q .sshpasswd.gpg | sshpass ssh [email protected]
まとめ
sshpass
は、システム管理者に非常に役立つシンプルなツールです。これは、決して、公開鍵認証であるSSH認証の最も安全な形式を上書きするものではありません。ただし、sshpass
sysadminツールボックスに追加することもできます。
[無料のオンラインコース:Red HatEnterpriseLinuxの技術概要。 ]