!/usr/bin/env bash

!/usr/bin/env bash

Aus einem Bash-Skript:

source ./expect.sh

Ich füge einen Expect-Code ein:

#!/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

Und ich bekomme Folgendes:

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: 

Dann versuche ich, eine Verbindung herzustellen, und werde zur Eingabe eines Kennworts aufgefordert ...

Beim Überprüfen des Servers bin ich sicher, dass kein Schlüssel hochgeladen wurde, da ich eine Auflistung der Datei „authorized_keys“ erwarten würde:

root@server: ls /home/user/.ssh/
known_hosts

Was mache ich falsch?

Antwort1

Das Problem besteht darin, dass der SSH-Client das Kennwort direkt vom Terminal und nicht von der Standardeingabe liest.

Der einfachste Weg, den ich kenne, ist, „sshpass“ zu installieren und dann Folgendes zu verwenden (ohne Expect):

sshpass -p "thepassword" ssh-copy-id -i /home/user/.ssh/id_rsa.pub [email protected]

Antwort2

Das folgende Skript sollte auch funktionieren

#!/usr/bin/expect -f
#
# Install RSA SSH KEY with no passphrase
#

set user [lindex $argv 0]
set host [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh-copy-id -i /path/to/your/.ssh/id_rsa.pub $user@$host

expect {
    "continue" { send "yes\n"; exp_continue }
    "assword:" { send "$password\n"; }
}

Sie müssen es ausführbar machen und wie folgt aufrufen:

./ssh-copy-id.exp <user> <host> <password>

In Ihrem Fall:

./ssh-copy-id.exp root 111.111.111.111 thepassword

Antwort3

Sie kopieren den Schlüssel in /root/.ssh/authorized_keysdas Benutzerkonto und nicht in das Benutzerkonto. Beachten Sie, wo es heißt:[email protected]'s password:

Antwort4

!/usr/bin/env bash

          fingerprints(){
          /usr/bin/expect -c "set timeout 50; spawn ssh-copy-id -i /root/.ssh/id_rsa.pub -p\ <port num>\ root@$<your server>;
          
          expect {
                  \"assword: \" {
                  send \<your pwd>\n\"
                  expect {
                      \"again.\"     { exit 1 }
                      \"expecting.\" { }
                      timeout      { exit 1 }
                  }
              }
              \"(yes/no)? \" {
                  send \"yes\n\"
                  expect {
                      \"assword: \" {
                          send \"<your pwd>\n\"
                          expect {
                              \"again.\"     { exit 1 }
                              \"expecting.\" { }
                              timeout      { exit 1 }
                          }
                      }
                  }
              }
          }"
          }

Fingerabdrücke

verwandte Informationen