スクリプトが自動的にパスワードを取得できるようにするにはどうすればよいですか?

スクリプトが自動的にパスワードを取得できるようにするにはどうすればよいですか?

次の行を含むsftpスクリプトなど、あるサーバーから別のサーバーにいくつかのファイルを実行するスクリプトがあります。script.ksh

sftp user@ip_address << EOF
cd path
put file1
bye
EOF

スクリプトを実行するとき。

./script.ksh

以下のようにパスワードを尋ねます。

Password:

パスワードのない接続ではないため、ここではパスワードを手動で渡す必要があります。

このスクリプトを自動化したいのですが、Passwordメッセージが表示されたら自動的にパスワードを取得する必要があります。誰でもどんな提案がありますか?

答え1

この試み:

#!/usr/bin/expect

spawn sftp USERNAME@ip_address:/path/to/folder
expect "Password:"
send "PASSWORD\n"
expect "sftp>"
send "put file1\n"
expect "sftp>"
send "bye\n"

または、スクリプト全体を期待どおりに使用したくない場合:

#!/bin/sh

expect << 'EOS'
spawn sftp USERNAME@ip_address:/path/to/folder
expect "Password:"
send "PASSWORD\n"
expect "sftp>"
send "put file1\n"
expect "sftp>"
send "bye\n"
EOS

答え2

設計上、sshはパスワード「インクルード」を許可しません。これは、公開秘密鍵ペアを使用する非対話型認証メカニズムがあるためです。

したがって、私はこれを最初の寄港地として考えることをお勧めします。一般的に簡単です。

  • クライアントで実行しますssh-keygen
  • サーバーに追加してくださいid_rsa.pub~/.ssh/authorized_keys

何らかの理由でこれがオプションでない場合は、代替オプションを使用してexpectSSHにパスワードを送信できます。

答え3

本当に簡単です。特に、/etc/hosts ファイルに他のサーバーの IP と名前が含まれている場合は、さらにそうです。

まず、他のコンピュータと共有できる公開鍵を生成します。

ssh-keygen

これら3つの質問に答えるには、Enterキーを押します。

次に、次のように公開鍵を別のサーバーに接続します。

ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host

リモートホストは、/ etc / hostsファイルの名前またはIPアドレスです。

他のホストのキーを受け入れるように求められます。 「はい」(単なるyではない)と答えると、他のサーバーのパスワードを求めるメッセージが表示されます。

それはすべてです。これで、キーがリモートホストの.ssh/authorized_keyファイルにリンクされました。

これを使用するには、scpまたはsshを正常に実行すると、リモートホストのパスワードを求めるプロンプトが表示されなくなります。

答え4

echo "ftping files to destination"
USER='(username)'
PASSWD='(********)'
sftp user@ip_address << EOF
quote USER $USER
quote PASS $PASSWD
cd path
put file1
bye
EOF

関連情報