Meinen SSH-Schlüssel über SSH-Copy-ID in einem Skript ohne Aufforderung auf den Remote-Computer kopieren?

5

Mein Verwendungszweck ist, dass ich meinen SSH-Schlüssel für den autorisierten Zugriff auf eine Remote-Maschine kopieren muss. Ich muss in der Lage sein, ein Skript aufzurufen, das über meinen SSH-Schlüssel auf den Remotecomputer kopiert, ohne meine Eingabe zu benötigen. Derzeit werden Sie aufgefordert, ein Kennwort und ein Ja zum RSA-Fingerabdruck einzugeben. Ich brauche es, um meine Hosts automatisch über einen IP-Bereich miteinander verbinden zu können

Aamir Mushtaq
quelle

Antworten:

10

Ich glaube, Sie können sshpass verwenden.

  • Ubuntu / Debian: apt-get install sshpass
  • Fedora / CentOS: yum install sshpass

Zum Beispiel:

sshpass -p "PASSWORD" ssh-copy-id -o StrictHostKeyChecking=no USERNAME@IP

Rob Calistri
quelle
1
Ich empfehle, das Kennwort nicht direkt im Skript zu speichern, da das Skript möglicherweise mit dem fest codierten Kennwort auf dem Computer verbleibt. Dies würde das Sicherheitsproblem weiter erhöhen. Die Übergabe als Eingabeargument ist möglicherweise vorzuziehen
Slizzered
2
Ich würde Slizzered beim Speichern auf dem Server zustimmen. Es sollte ein Argument für das Skript sein. Das heißt, wenn Sie als Argument übergeben, haben Sie immer noch das Problem, dass sich dieses Kennwort im Hintergrund befindet, während das Skript ausgeführt wird. Unabhängig davon gibt es immer Sicherheitsrisiken, wenn Sie den ssh-Schutz mit Dingen wie 'sshpass' umgehen!
Rob Calistri
0

Versuchen Sie für die Aufforderung zur Eingabe des SSH-Kennworts Folgendes zu verwenden ansible/ansible-playbook -k/--ask-pass. Es wird anrufen sshpass (FYI, vielleicht wird OSX nicht mit ausgeliefert sshpass ).

Fügen Sie für die Überprüfung des Hostschlüssels hinzu

[defaults]
host_key_checking = False

in ~ / .ansible.cfg oder /etc/ansible/ansible.cfg.

Oder export ANSIBLE_HOST_KEY_CHECKING=False genau wie dieser Handbuch sagt.

Verwenden Sie für die Bereitstellung von SSH-Schlüsseln authorized_keys Modul im ansible Spielbuch. Es ist für den Benutzer einfacher, die Idempotenz des Skripts beizubehalten.

jasonz
quelle
0

Wenn Sie das Kennwort nur einmal eingeben können, kopiert das folgende Skript Ihren SSH-Schlüssel sehr schnell auf eine große Anzahl von Hosts (in hosts.txt aufgeführt), ohne dass Sie Ihr Kennwort in die Befehlszeile eingeben müssen:

# sudo yum install moreutils sshpass openssh-clients
echo 'Input Password:';
read -s SSHPASS;
export SSHPASS;
parallel -i -j 25 sshpass -e ssh-copy-id '-o ConnectTimeout=10 -o StrictHostKeyChecking=no {}' -- `cat hosts.txt`;
export SSHPASS=''
Adam C.
quelle