次の行を含む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
何らかの理由でこれがオプションでない場合は、代替オプションを使用してexpect
SSHにパスワードを送信できます。
答え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