J'ai essayé d'écrire un script Shell qui peut se connecter automatiquement à un serveur ssh en utilisant un mot de passe mentionné dans le script. J'ai écrit le code suivant:
set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect
{
"[email protected]'s password"
{
send "password\r"
}
}
Ce code ne fonctionne pas correctement, il demande toujours le mot de passe. Quelqu'un peut-il m'aider à résoudre ce problème
J'ai déjà écrit un script expect
pour me connecter à un serveur ssh (comme votre cas) et mon script était quelque chose comme ceci:
#!/usr/bin/expect
spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact
Je pense que peut-être le interact
manque dans votre script.
Vous vous y trompez. Ce que vous voulez faire, c'est générer une paire de clés ssh sans mot de passe, puis (tant que le serveur prend en charge l'authentification par clé RSA), vous pouvez entrer sans avoir à taper un mot de passe pour tous. Il s'agit d'un risque pour la sécurité si votre clé privée est stockée dans un endroit où elle pourrait être volée.
Suivez ces étapes:
mkdir -p ~/.ssh
cd ~/.ssh
ssh-keygen -type dsa -i mysshkeys
Il y aura maintenant deux fichiers dans votre ~/.ssh
répertoire, mysshkey.pub
et mysshkey
. mysshkey.pub
est votre clé publique, celle-ci est sûre à mettre sur des serveurs distants. mysshkey
est votre clé privée sans mot de passe, il est pas sûr de mettre sur des serveurs distants (ou ailleurs, quelqu'un d'autre pourrait obtenir une copie).
Sur le serveur sur lequel vous souhaitez vous connecter:
mkdir -p ~/.ssh
mysshkey.pub
en ~/.ssh/authorized_keys
~/.ssh/authorized_keys
est chmod
'd à 600
Maintenant, pour le mettre en action sur votre machine locale, vous exécutez la commande suivante:
ssh -i ~/.ssh/mysshkey <remote_server_ip>
Et vous serez connecté sans être invité à entrer un mot de passe.
Il s'agit d'une méthode bien préférable pour gérer les connexions automatisées car vous ne finissez pas par coder en dur votre mot de passe à plusieurs endroits qui doivent être mis à jour si vous le changez.
Sur les distributions basées sur Debian, le paquetage sshpass
fournit un moyen plus simple de faire ce que vous voulez. Le package est disponible pour de nombreuses autres distributions populaires. Vous devez d'abord le configurer:
echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt
Ensuite, appelez la commande SSH à partir d'un script comme celui-ci:
sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]
Cela offre plus de flexibilité, par exemple si vous utilisez un environnement local différent ou devez changer le mot de passe, que les solutions utilisant expect
.
Installez d'abord le sshPass Sudo apt-get install sshpass
Créez ensuite un alias dans le fichier .bashrc en tant que
alias sshLogin='sshpass -p <your ssh password> ssh username@remote_Host'
Rechargez maintenant votre fichier .bashrc modifié par source ~/.bashrc
Vous avez maintenant terminé.
Vous pouvez maintenant exécuter le ssh en utilisant l'alias créé ci-dessus sshLogin
dans le terminal.
vous pouvez utiliser ceci:
sshpass -p 'yourpassword' ssh user@ip
Tout ce dont vous avez besoin pour créer une clé hachée et l'enregistrer sur votre PC
Tapez simplement
ssh-keygen -t rsa -b 4096 # just press Enter till the end
puis entrez
ssh-copy-id <user>@<server>
puis connectez-vous normalement en utilisant
ssh <user>@<server>
Maintenant, vous n'avez plus besoin d'un mot de passe
Remarque: L'enregistrement de votre mot de passe en texte brut est dangereux
Cette méthode crée une valeur hachée de votre mot de passe en utilisant RSA avec une clé publique de longueur 4096 qui est très sécurisée.
Connexion sans mot de passe SSH utilisant SSH Keygen en 5 étapes faciles :
Configuration de l'environnement:
Étape 1: Authentification SSH-Kegen Keys on 192.168.0.12)
Connectez-vous d'abord au serveur 192.168.0.12 avec un utilisateur et générez une paire de clés publiques à l'aide de la commande suivante.
--- (
Étape 2: Créez le répertoire .ssh sur - 192.168.0.11
Utilisez SSH depuis le serveur 192.168.0.12 pour connecter le serveur 192.168.0.11 pour créer le répertoire .ssh sous celui-ci, en utilisant la commande suivante.
Étape 3: Téléchargez les clés publiques générées sur - 192.168.0.11
Utilisez SSH à partir du serveur 192.168.0.12 et téléchargez la nouvelle clé publique générée (id_rsa.pub) sur le serveur 192.168.0.11 sous l'utilisateur .ssh
répertoire en tant que nom de fichier authorized_keys.
Étape 4: Définissez les autorisations sur - 192.168.0.11
En raison des différentes versions de SSH sur les serveurs, nous devons définir des autorisations sur .ssh
répertoire et authorized_keys
fichier.
Étape 5: Connectez-vous du serveur 192.168.0.12 au serveur 192.168.0.11 sans mot de passe
A partir de maintenant, nous pouvons nous connecter à 192.168.0.11 en tant qu'utilisateur sheena à partir du serveur 192.168.0.12 en tant qu'utilisateur tecmint sans mot de passe.
Comme déjà décrit dans d'autres réponses, j'utilise également sshpass
mais je le combine avec la commande read
pour stocker mon mot de passe dans une variable d'environnement temporaire. De cette façon, mon mot de passe n'est jamais écrit en clair. Voici la commande en ligne que j'utilise:
read -s PASS; sshpass -p $PASS ssh <user>@<Host adress>
Après cela, vous devez entrer votre mot de passe (rien n'apparaît à l'écran), puis appuyer sur Entrée ouvrira la connexion.
Le premier argument est le nom d'hôte et le second est le mot de passe.
#!/usr/bin/expect
set pass [lindex $argv 1]
set Host [lindex $argv 0]
spawn ssh -t root@$Host echo Hello
expect "*assword: "
send "$pass\n";
interact
Exécution: ./script.expect
Je l'ai fait récemment, cela peut vous aider:
sshpass -p 'password' username@ipaddress
si cela ne fonctionne pas, vous devrez générer des clés sur l'autre machine avec laquelle vous souhaitez vous connecter
ssh-keygen
il générera des clés privées et publiques et vous demandera un emplacement, laissez vide, il enregistrera les clés dans le dossier .ssh par défaut, il vous demandera une phrase secrète, vous pouvez également le laisser vide dans le dossier .ssh et changer le le nom de la clé publique à "authorized_keys"
cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username
cela ajoutera l'utilisateur à la liste maintenant, allez dans le répertoire personnel et donnez l'autorisation et redémarrez les services sshd
chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
Sudo service sshd restart
vous devez maintenant déplacer la clé privée vers le système à cet endroit à partir duquel vous allez exécuter la commande ssh, puis vous pouvez vous connecter avec
sshpass -p 'password' ssh -i id_rsa username@ip
si même cela ne fonctionne pas, allez dans/etc/ssh ouvrez sshd_config avec l'éditeur vim vérifiez si le pubkeyAuthenticatoin est réglé sur oui ou non, sinon changez-le en oui, redémarrez les services sshd et essayez-le, cela fonctionnera certainement .