
Linuxは市場で最も柔軟性の高いオペレーティングシステムであり、このプラットフォームでできないことはほとんどありません。シェルスクリプトを一目見れば、Linuxの強力さとカスタマイズ性の高さが分かります。シェルスクリプトは、オペレーティングシステムを初めて使う人にとってはあまり馴染みのない機能ですが、管理者なら誰でもその必要性を十分に理解しています。
パスワードが必要なシェルスクリプトを作成しなければならない状況に遭遇するかもしれません。スクリプト内にパスワードを保存したくない場合は、どうすればよいでしょうか?
参照: 知っておくべきオープンソースと Linux の用語 40 選 (TechRepublic Premium)
解決策の一つは、sshpassを使うことです。これにより、シェルスクリプト内でパスワードを保存せずに、パスワードを使用できるようになります。まさにその方法をご紹介します。
Linux シェルスクリプトをパスワードレスにするために必要なもの
私の例を実行するために必要なのは、2台のLinuxマシンとsudo権限を持つユーザーだけです。Ubuntu Desktop 22.04とPop!_OS 22.04を使用してデモを行いますので、RHELベースのディストリビューションをお使いの場合は、apt-getをdnfに置き換えてください。
sshpassのインストール方法
まず、sshpassをインストールします。これはスクリプトを実行するマシンにのみインストールすればよく、私の場合はUbuntu Desktop 22.04です。rsyncを使ってUbuntuのユーザーアカウントの~/Documentsディレクトリをバックアップする簡単なスクリプトを作成します。
ログイン後、ターミナル ウィンドウを開き、次のコマンドでスクリプト ファイルを作成します。
nano ~/backup
そのファイルに次の内容を貼り付けます。
!/bin/bash
#Copy data to a remote server
rsync -av Documents USER@IP:/home/USER/Backup
ここで、USER はユーザー名、IP はバックアップを保存するマシンの IP アドレスです。
ファイルを保存して閉じます。
次のようにスクリプトに実行権限を与えます。
chmod u+x ~/backup
さて、スクリプトを実行すると、リモートユーザーのパスワードの入力を求められます。これは避けたいところです。
ここで sshpass を使用したらどうなるでしょうか? スクリプトは次のようになります。
!/bin/bash
#Copy data to a remote server
sshpass -p "PASSWORD" rsync -av Documents USER@IP:/home/USER/Backup
ここで、PASSWORD はリモート ユーザーのパスワード、USER はユーザー名、IP はバックアップを保存するマシンの IP アドレスです。
それは避けたいですね。どうすればいいでしょうか?パスワードを暗号化します。
sshpassのパスワードを暗号化する方法
次のステップはパスワードを暗号化することです。以下のコマンドで隠しファイルを作成します。
nano ~/.secrets
そのファイルにリモートユーザーのパスワードを追加します。ファイルを保存して閉じます。
次に、次のようにしてファイルを暗号化する必要があります。
gpg -c ~/.secrets
このコマンドは、パスワードの暗号化バージョンが含まれる新しいファイル .secrets.gpg を作成します。
ここで、バックアップ スクリプトを変更する必要があります。変更は次のようになります。
!/bin/bash
#Copy data to a remote server
gpg -dq /home/USER/.secrets.gpg | sshpass rsync -av Documents USER@IP:/home/USER/Backup
これで、./backup コマンドを実行してもパスワードを聞かれなくなり、パスワードが誰かに見られる心配もなくなります。確実にパスワードを確認するには、次のコマンドで元の .secrets ファイルを削除してください。
rm ~/.secrets
これで完了です。Linuxシェルスクリプトでパスワードレスを実現できます。セキュリティがさらに強化されます。
Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube で TechRepublic の How To Make Tech Work を購読してください。
TechRepublic Academy の The Mastering Linux Development Bundle で詳細を学習してください。