Bashスクリプトでは:
source ./expect.sh
期待されるコードが含まれています。
#!/bin/bash
/usr/bin/expect <<EOL
spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111
expect '*?assword*'
send 'thepassword'
interact
EOL
私はこれを得ます:
spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111.111
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
その後、接続しようとすると、パスワードの入力を求められます。
サーバーを確認した結果、「authorized_keys」ファイルがリストされると予想したため、キーがアップロードされていないことを確認します。
root@server: ls /home/user/.ssh/
known_hosts
私は何が間違っていましたか?
答え1
「root」の説明に加えて、次の内容があります。
- 一重引用符は予想される一般的な文字です。二重引用符を使用してください
- パスワードを送信するときに「Enter」を押すことを忘れないでください。
expect "*?assword*"
send "thepassword\r"
heredocの本文に変数やコマンドの置換を挿入する必要がない限り、通常はheredocの末尾の単語を引用することをお勧めします。
some command <<'END'
# .............^...^
...
END
答え2
あなたは実行しますspawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111
。 IPアドレスが間違っているようです。
答え3
パスワードプロンプトで確認できます。[email protected]
ルートのキーであるfileをリモートに設定しています/root/.ssh/authorized_keys
。ルート以外の名前でスクリプトを実行するか、user
明示的に指定すると、ルート以外のパスワードのないログインが許可されます。ssh-copy-id ... [email protected]
user