web-dev-qa-db-fra.com

Script Shell pour se connecter à un serveur ssh

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

29
pradeepchhetri

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.

38
saeedn

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:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Presse Return lorsque vous êtes invité à saisir la phrase secrète
  5. Presse Return une deuxième fois pour confirmer.

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:

  1. Connectez-vous au serveur distant
  2. mkdir -p ~/.ssh
  3. Copiez et collez le contenu de mysshkey.pub en ~/.ssh/authorized_keys
  4. Sois sûr que ~/.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.

32
synthesizerpatel

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.

20
likeitlikeit

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.

7
bpathak

vous pouvez utiliser ceci:

sshpass -p 'yourpassword'  ssh user@ip
5

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.

2
Mohammad Hizzani

Connexion sans mot de passe SSH utilisant SSH Keygen en 5 étapes faciles :

Configuration de l'environnement: enter image description here

É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.

--- (enter image description here

É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.

enter image description here

É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.

enter image description here

É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.

enter image description here

É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.

enter image description here

1
Premraj

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.

1
StormRider

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

0
Shivam Mehrotra

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 .

0
Utkarsh Gupta