インタラクションなしであるサーバーをパスワードで保護された別のサーバーにSFTPする方法は?

インタラクションなしであるサーバーをパスワードで保護された別のサーバーにSFTPする方法は?

あるサーバーから別のサーバーにファイルを転送し、sftpそれをスクリプトに含めたいです。しかし、問題は、ターゲットサーバーがパスワードで保護されているサーバーであることです。したがって、パスワードプロンプトが表示されたらパスワードを入力する必要があります。

スクリプトに含めると、ユーザーの対話は必要ありません。パスワード自体を取得する必要があります。 (パスワードを知っていますが、どのようにスクリプトに含めて自動的に受け取ることができますか?)

誰でも助けることができますか?たくさん検索しましたが、適切な回答が見つかりませんでした。本番サーバーで作業しているため、接続パスワードを減らすことはできません。だからサーバーを変更することはできません。しかし、私のスクリプトはそれ自体を処理したいと思います。助けてください。

ベストアンサー1

あなたが望むものはssh-keyに非常に似ています。これにより、パスワードを必要としない「信頼できる」ネットワークを作成できます。これはまた、スクリプトにプレーンテキストパスワードがないように追加のセキュリティを提供します。

ソースマシンから:

ssh-keygen -t rsa -b 2048
Enter file in which to save the key (/root/.ssh/id_rsa): [Hit Enter]
Enter passphrase (empty for no passphrase): [Hit Enter]
Enter same passphrase again: [Hit Enter]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

公開鍵をターゲットサーバーにコピーします。

ssh-copy-id [email protected]
[OR]
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

今スクリプトから:

sftp -o "IdentityFile=/root/.ssh/id_rsa" [email protected]

またはこれを行うこともできます:

read -s -p "Enter Password: " password
sshpass -p $password sftp [email protected]

どこ:

  • -s:画面にパスワードを表示しない
  • -p: "password:": テキストメッセージの表示
  • パスワード:パスワードを格納するBash変数

おすすめ記事