web-dev-qa-db-ja.com

bashスクリプトで使用されるscpコマンドにパスワードを渡す方法は?

可能性のある複製:
SSH経由で接続し、公開鍵を使用せずに自動的にパスワードを入力します

DBのダンプを作成し、ファイルをあるサーバーから別のサーバーにコピーするbashスクリプトがありますが、接続する前に常にパスワードを要求します。

scp file.tar.gz [email protected]:/backup

パスワードをスクリプトに直接渡す方法はありますか?

43
chubbyk

ツールを使用 sshpass

sshpass -p 'password' scp file.tar.gz [email protected]:/backup 
68
GGarciaBas

Rootを使用するのではなく、このジョブ専用のアカウントを作成してください。パスワードの代わりにパスフレーズなしの公開鍵を使用します。

scp -i /home/backupuser/.ssh/id_rsa [email protected]:/backup

宛先システムのバックアップに特別なアカウントを使用することにより、ルートパスワードを公開することはありません。

41
user9517

pscp を使用すると、-pw引数を使用してパスワードを直接渡すことができます。代わりに、これはより良いアイデアです。sshエージェントを使用し、鍵ベースのログオンをセットアップします-これはより安全です。鍵ベースの logon を使用するようにsshを設定する方法がここにあります

yes コマンドを使用して、プログラムにyesを送信できます。

3
Journeyman Geek

expectのようなものを使用してログインプロセスにテキストを送信する方法を理解するよりも、sshをキーベースの認証を使用するように設定することをお勧めします。

を見てみましょう:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys

したがって、基本的には、スクリプトを実行するマシンでssh-keygen -t dsaを実行します。パスフレーズの入力を求められたら、Enterキーを押して空白を受け入れます。 2つのファイルを取得します。デフォルトの提案に従った場合、ファイルは〜/ .ssh/id_dsaおよび〜/ .ssh/id_dsa.pubになります。 1つ目は秘密鍵です。 2つ目は公開鍵です。

ssh-copy-id user@server2を使用して、公開鍵を2番目のサーバーにコピーします。これにより、公開鍵がserver2上のユーザーのauthorized_keysファイルに追加されます。

これで、最初のマシンからsshを実行して、パスワードなしでログインできるようになります。

ファイルをコピーするには、scpまたはrsyncで問題ありません。それはあなたが何をしているかに依存します。 rsyncはデフォルトでsshを使用するため、設定したばかりの鍵ベースの認証を使用します。

3
cjc

セキュリティ上の理由から、パスワードのないssh-keysを使用しないでください

ツール keychain を使用すると、パスワードの入力を求められることなく、ssh-agentを再利用し、スクリプトでsshを介してrsyncを実行できます。

Ubuntuマシンにインストールするには、次のコマンドを実行します。

Sudo apt-get install keychain

使い方の詳細は キーチェーンのマンページ を確認してください。

2
pkhamre

scpSSHを使用してリモートサーバーにトンネリングし、ファイルを転送します。 SSHは、パスワード、SSHキー、またはその両方でユーザーを認証できます(推奨)。

パスワードなしでファイルを転送するには、 create SSH key 使用するユーザーに対して(rootはnot推奨。代わりに非特権ユーザーを使用し、ターゲットサーバーでrootとしてジョブを実行して特権アクションを実行します)。

次に、SSHキー接続を受け入れるようにターゲットシステムのSSHデーモンを構成する必要があります(上記のリンクにもあります)。

パスワードのない侵害されたSSHキーは、侵害されたパスワードと同じであり、誰でも侵入できることに注意してください。実際のユーザーの場合、セキュリティを2倍にして、キーとパスワードを要求することをお勧めします。

1
Andy