パスワードで保護されたリソースに接続するためにLinuxスクリプトを使用することを余儀なくされている場合は、おそらくスクリプトにそのパスワードを入れることについて不安を感じます。 OpenSSLはあなたにとってその問題を解決します。
パスワードとスクリプト
シェルスクリプトにパスワードを入れることは素晴らしいアイデアではありません。実際、それは本当に悪い考えです。スクリプトが間違った手に入った場合、それを読むすべての人はパスワードのものを見ることができます。しかし、あなたがスクリプトを使うことを余儀なくされたならば、あなたは他に何をすることができますか?
プロセスがそのポイントに達するとパスワードを手動で入力できますが、スクリプトが無人で実行されている場合は機能しません。ありがたいことに、パスワードをスクリプトにハードコーディングするための代替手段があります。具体的には、これを達成するために異なるパスワードを使用して、いくつかの強い暗号化とともに使用します。
このシナリオの例では、UbuntuコンピュータからFedora Linuxコンピュータへのリモート接続を行う必要があります。 Bashシェルスクリプトを使用してFedoraコンピュータへのSSH接続を行います。スクリプトは無人で実行されなければならず、スクリプト内のリモートアカウントのパスワードを置き換えたくありません。この場合はSSHキーを使うことはできません。
私たちは有名なものを利用するつもりです
OpenSSLツールキット
暗号化とユーティリティを処理するには
s s
パスワードをsshコマンドにフィードするには。
関連している: LinuxシェルからSSHキーを作成してインストールする方法
OpenSSLとSSHPASSのインストール
他の暗号化およびセキュリティツールはOpenSSLを使用するため、すでにコンピュータにインストールされる可能性があります。ただし、そうでない場合は、インストールする瞬間がかかります。
Ubuntuで、このコマンドを入力します。
sudo apt openssl
インストールする
s s
、このコマンドを使用してください。
SUDO APTインストールSSHPASS
Fedoraでは、次のように入力する必要があります。
SUDO DNFのインストールOpenSSL
インストールするコマンド
s s
は:
SUDO DNF SSHPASS
Manjaro Linuxでは、OpenSSLをインストールできます。
SUDO PACMAN -SY OpenSSL
最後にインストールする
s s
、このコマンドを使用してください。
SUDO PACMAN -SY SSHPASS
コマンドラインで暗号化します
私たちが使用する前に
openssl
スクリプトを使ったコマンドで、コマンドラインでそれを使用してそれをよく知ってみましょう。リモートコンピュータ上のアカウントのパスワードがあるとしましょう
さびた!helering.pitshaft.
。私たちはそのパスワードを使って暗号化するつもりです
openssl
。
私たちがするときに暗号化パスワードを提供する必要があります。暗号化パスワードは、暗号化および復号化プロセスで使用されます。のパラメータとオプションがたくさんあります
openssl
指図。私たちは一瞬のうちそれぞれを見てみましょう。
エコー「さびた!helering.pitshaft」 OpenSSL ENC -AES-256-CBC -MD SHA512 -A-PBKDF2 -IRTER 100000 -SALT-PASS PASS: 'pick.your.password'
私たちは使用しています
エコー
リモートアカウントのパスワードをパイプを通して送信するには
openssl
指図。
NS
openssl
パラメータは次のとおりです。
- ENC -AES-256-CBC :符号化タイプ。私たちはを使っています 高度な暗号化規格 暗号化ブロックチェーン付き256ビットキー暗号
- -MD SHA512 :メッセージダイジェスト(HASH)タイプ。 SHA512暗号化アルゴリズムを使用しています。
-
-NS
:これは告げます
openssl暗号化フェーズ後および復号化フェーズの前に基本64エンコーディングを適用する。 - -pbkdf2. :パスワードベースのキー導出機能2(PBKDF2)の使用は、あなたのパスワードを推測することに成功することが成功することがはるかに困難です。 PBKDF2は暗号化を実行するために多くの計算を必要とします。攻撃者はそれらの計算をすべて複製する必要があります。
- -IRTER 100000 :PBKDF2が使用する計算数を設定します。
- -塩 :ランダムに印加された塩値を使用すると、プレーンテキストが同じであっても、暗号化出力を毎回異なるようにします。
-
-pass pass: 'pick.your.password'
:パスワード暗号化されたリモートパスワードを復号化するために使用する必要があります。代わりの
pick.your.password.あなたの選択の堅牢なパスワードを使って。
私たちの暗号化版
さびた!helering.pitshaft.
パスワードは端末ウィンドウに書き込まれます。
これを復号化するには、その暗号化文字列を渡す必要があります。
openssl
私たちが暗号化したのと同じパラメータを持つが、
-NS
(復号化)オプション
ECHO U2FSDGVKX19IIIRNHSEG + WM / UKJTZJWNYOPJZPHYRDKYZH5LVZRPIGO1S0GOZU46 | OpenSSL ENC -AES-256-CBC -MD sha512 -a -d -pbkdf2 -iter 100000-salt -passパス: 'pick.your.password'
文字列は復号化され、元のテキスト - リモートユーザーアカウントのパスワードがターミナルウィンドウに書き込まれます。
それは私達が私達のリモートユーザーアカウントのパスワードを安全に暗号化することができることを証明しています。暗号化フェーズで提供したパスワードを使用して必要な場合は、復号化することもできます。
しかし、これは実際に私たちの状況を改善しますか?リモートアカウントのパスワードを復号化するための暗号化パスワードが必要な場合は、確かに復号化パスワードがスクリプト内にある必要がありますか?さて、そう、そうです。しかし、暗号化されたリモートユーザーアカウントのパスワードは別の隠しファイルに保存されます。ファイルの権限は、あなたが誰かがあなたとシステムのrootユーザーを妨げるでしょう、明らかにそれにアクセスすることができます。
暗号化コマンドから出力をファイルに送信するには、リダイレクトを使用できます。ファイルは ".secret_vault.txt"と呼ばれます。暗号化パスワードをより堅牢に変更しました。
エコー「さびた!helering.pitshaft」 OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 -IRTER 100000 -SALT-PASS PASS: 'Secret#Vault!パスワード'> .secret_vault.txt
何も表示されませんが、パスワードは暗号化され、 ".secret_vault.txt"ファイルに送信されます。
隠しファイル内のパスワードを復号化することによって機能したことをテストできます。私たちは使用していることに注意してください
猫
ここでは違います
エコー
。
Cat .secret_vault.txt | OpenSSL ENC -AES-256-CBC -MD sha512 -a -d -pbkdf2 -iter 100000-salt-pass: 'Secret#Vault!Password'
パスワードはファイル内のデータから正常に復号化されています。良い
使用する
chmod.
他の誰もアクセスできないように、このファイルの権限を変更するには。
Chmod 600 .secret_vault.txt
ls -l .secret_vault.txt
許可を使用する600のマスクは、ファイルの所有者以外の誰かのためのすべてのアクセスを削除します。私たちはスクリプトを書くために進むことができます。
関連している: Linuxでchmodコマンドを使用する方法
スクリプト内のOpenSSLを使用してください
私たちのスクリプトはかなり簡単です:
#!/ bin / bash. #リモートアカウントの名前 remote_user =オタク #リモートアカウントのパスワード REMOTE_PASSWD = $(CAT .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000-salt -passパス: 'Secret#Vault!Password') #リモートコンピュータ remote_linux = fedora-34.local. #リモートコンピュータに接続し、script.logというファイルにタイムスタンプを入力します。 sshpass -p $ remote_passwd ssh -t $ remote_user @ $ REMOTE_LINUX< _remote_commands Echo $ USER " - " "" "$(日付)>; /home/$ remote_user/script.log. _remote_commands
-
呼び出された変数を設定します
remote_user「オタク」に。 -
その後、呼び出された変数を設定します
remote_passwd復号化されたパスワードの値には、瞬間前に使用したのと同じコマンドを使用して、 ".secret_vault.txt"ファイルから引き出されます。 -
リモートコンピュータの場所は、呼び出された変数に格納されています
remote_linux。
その情報では、これを使用できます
s
リモートコンピュータに接続するためのコマンド。
-
NS
s sコマンドは接続線の最初のコマンドです。私たちはそれを使って使います-NS(パスワード)オプションこれにより、送信されるべきパスワードを指定できます。s指図。 -
私たちはを使います
-NS(疑似端末割り当てを無効にする)オプションsリモートコンピュータに疑似TTYを割り当てる必要はありません。
私たちは短いです
ここで文書
リモートコンピュータにコマンドを渡すには。 2人の間のすべて
_remote_commands
文字列はリモートコンピュータ上のユーザーセッションに指示として送信されます。この場合は、それは単一のBashスクリプトです。
リモートコンピュータに送信されたコマンドは、ユーザーアカウント名とタイムスタンプを「script.log」というファイルにログに記録します。
スクリプトをエディタにコピーして貼り付け、それを "go-remote.shというファイルに保存します。"詳細を変更して、独自のリモートコンピュータ、リモートユーザーアカウント、およびリモートアカウントのパスワードのアドレスを反映しています。
使用する
chmod.
スクリプトを実行可能にするため。
CHMOD + X GO-REMOTE.SH
残っているのはそれを試すことだけです。スクリプトを起動しましょう。
/ go-remote.sh
私たちのスクリプトは無人スクリプトのためのミニマリストテンプレートであるため、端末への出力はありません。ただし、Fedoraコンピュータの "script.log"ファイルを確認した場合、リモート接続が正常に行われ、 "script.log"ファイルがタイムスタンプで更新されたことがわかります。
CAT Script.log
あなたのパスワードは私的です
リモートアカウントのパスワードはスクリプトに記録されていません。
そして復号化パスワード は、 スクリプトでは、それを復号化してリモートアカウントのパスワードを取得するために、他の誰も ".secret_vault.txt"ファイルにアクセスできません。