実行時に情報(他のマシンのパスワード/ユーザー名)を入力する必要のあるbashスクリプトを作成しました。
この情報をコードに入力(ハードコーディング)することでこれを防ぐ方法はありますか?このようにして、実行すると、何も入力しなくてもスムーズに実行されます。
これはコマンドです:
scp /home/machine1/backup/test.txt /home/machine2/backup
Machine2のパスワードを入力する代わりに、スクリプト内でハードコーディングします。
パスワードをシェルスクリプトにハードコーディングしないでください。他の人が簡単に読むことができるためです。
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 it(ssh-keygen
が要求したときにパスフレーズを入力)秘密キーが保護される(パスフレーズで暗号化される)ため、より高いセキュリティが必要な場合は、パスフレーズを入力する必要があります。 scp
を指定してスクリプトを実行すると。
たとえば、キーファイルをコピーする必要があります
ssh-copy-id <username>@<Host>
scp
は、データ転送にssh
を使用します。そのため、キーが配置されている場合、パスワードなしで機能するはずです。
ssh
を使用してUbuntuにopenssh-server
をインストールすることにより、すべてのLinuxマシンをapt
サーバーにすることができます。
Sudo apt update
Sudo apt install openssh-server
トラブルシューティングのヒントなど、詳細とリンクします。
Rsa公開/秘密鍵ペアを使用して、サーバーへのsshアクセスをセットアップします。秘密鍵をメモリにロードしたままにします。その後、パスワードなしでサーバーにscpまたはsshできます(人生を楽にするだけでなく、キーファイル認証はパスワード認証よりもはるかに安全です)
キーファイル認証用にsshを設定する方法は次のとおりです。 https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
sshpass
を使用します。 Ubuntuでは、Sudo apt install sshpass
でインストールできます。
この一般的な構文は、トリックを行う必要があります:
sshpass -p<password> <source> <destination>
ただし、これは安全ではありません。基本的なセキュリティよりも先に利便性を置きすぎないようにしましょう。 Anyシステム上の他のユーザーは、他のユーザーによって実行されているコマンドと引数を見ることができます。それを防ぐために、sshpass
を環境変数から読み取らせることができます。
export SSHPASS=<password>
sshpass -e scp <source> <destination>
また、他の何かスクリプト内が信頼できない場合は、unset SSHPASS
を実行することをお勧めします。