web-dev-qa-db-ja.com

パスワードをスクリプトにハードコーディングしてscpコマンドのパスワードを入力する必要を回避するにはどうすればよいですか?

実行時に情報(他のマシンのパスワード/ユーザー名)を入力する必要のあるbashスクリプトを作成しました。

この情報をコードに入力(ハードコーディング)することでこれを防ぐ方法はありますか?このようにして、実行すると、何も入力しなくてもスムーズに実行されます。

これはコマンドです:

scp /home/machine1/backup/test.txt /home/machine2/backup

Machine2のパスワードを入力する代わりに、スクリプト内でハードコーディングします。

6
Taieb

SSHキー認証は便利で安全です

パスワードをシェルスクリプトにハードコーディングしないでください。他の人が簡単に読むことができるためです。

  • key authentication to sshでログインする必要があります。

    これにより、パスワードが不要になり、安全性も高まります。これは、コンピューターがインターネット上で見える場合に特に重要です。重要でないと思われる場合は、来週のログイン試行を記録してみてください。

    • ランニング

      ssh-keygen
      

      おそらく、パスフレーズでキーを保護するように求められます

    • しないssh-keygenが要求したときにパスフレーズなしで続行するにはEnterキーを押します)、スクリプトを実行してパスワードを入力するときにパスワードやパスフレーズを入力したくないためscpコマンドライン。

      キー認証とクリアテキストパスワードを使用しない場合、シェルスクリプトに厳しいアクセス許可を設定することは非常に重要です。また、クリアテキストパスフレーズを使用しないセキュリティ関連のシェルスクリプトにも適しています。スクリプトファイルの既定のアクセス許可(ホームディレクトリのどこかに作成された場合)は、おそらく644です。

      $ ls -l shellscript 
      -rw-r--r-- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      また、スクリプトファイルにすべてのユーザー755の実行権限を与えることができます

      $ chmod 755 shellscript
      $ ls -l shellscript 
      -rwxr-xr-x 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      しかし、あなたはそれを600に削減した方が良いでしょう。あなた自身のユーザーID以外の許可はなく、実行許可もまったくありません。

      $ chmod 600 shellscript 
      $ ls -l shellscript
      -rw------- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      ./shellscriptで直接実行することはできませんので、

      bash shellscript       # when shellscript in the current directory
      bash path-to-shellscript/shellscript  # from other directories
      
    • Do itssh-keygenが要求したときにパスフレーズを入力)秘密キーが保護される(パスフレーズで暗号化される)ため、より高いセキュリティが必要な場合は、パスフレーズを入力する必要があります。 scpを指定してスクリプトを実行すると。

    • たとえば、キーファイルをコピーする必要があります

      ssh-copy-id <username>@<Host>
      
    • scpは、データ転送にsshを使用します。そのため、キーが配置されている場合、パスワードなしで機能するはずです。


  • sshを使用してUbuntuにopenssh-serverをインストールすることにより、すべてのLinuxマシンをaptサーバーにすることができます。

    Sudo apt update
    Sudo apt install openssh-server
    

13
sudodus

Rsa公開/秘密鍵ペアを使用して、サーバーへのsshアクセスをセットアップします。秘密鍵をメモリにロードしたままにします。その後、パスワードなしでサーバーにscpまたはsshできます(人生を楽にするだけでなく、キーファイル認証はパスワード認証よりもはるかに安全です)

キーファイル認証用にsshを設定する方法は次のとおりです。 https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

1
Eric Mintz

sshpassを使用します。 Ubuntuでは、Sudo apt install sshpassでインストールできます。

この一般的な構文は、トリックを行う必要があります:

sshpass -p<password> <source> <destination>

ただし、これは安全ではありません。基本的なセキュリティよりも先に利便性を置きすぎないようにしましょう。 Anyシステム上の他のユーザーは、他のユーザーによって実行されているコマンドと引数を見ることができます。それを防ぐために、sshpassを環境変数から読み取らせることができます。

export SSHPASS=<password>
sshpass -e scp <source> <destination>

また、他の何かスクリプト内が信頼できない場合は、unset SSHPASSを実行することをお勧めします。

0
user728899