1 votes

Se connecter en tant qu'utilisateur root à une machine distante en utilisant SSH

Mon problème est similaire à celui-ci J'essaie d'automatiser la partie où je peux accéder à la machine distante et exécuter une commande en tant que super utilisateur. Cela fonctionne bien jusqu'à ce qu'il se connecte, comme ici :-

$ ssh-keygen -t rsa -b 2048

à

$ ssh-copy-id id@server
id@server's password:
$ ssh id@server
id@server:~$  

L'avantage pour moi est que je peux demander à l'utilisateur le mot de passe de la machine distante une seule fois (lors de la génération des clés ssh), et après cela, lors de l'exécution d'une commande en tant que super-utilisateur, il ne devrait pas demander le mot de passe à nouveau, c'est-à-dire qu'il ne devrait pas avoir besoin d'une commande comme celle qui suit:-.

sudo su

Y a-t-il un moyen de le faire ? J'ai essayé de sauvegarder le mot de passe en tant que variable, puis de substituer la valeur comme :-.

echo -n "Enter password > "
read passwd
sshpass -p $username ssh -o StrictHostKeyChecking=no $username@$server sudo some_application &

Il demandera le mot de passe là où je ne peux pas substituer la valeur de la variable que j'ai déclarée.

2voto

sysfiend Points 1327

Avez-vous essayé d'utiliser expect ?

Simple login script écrit en expectative :

#!/usr/bin/expect
set timeout 9
set username [lindex $argv 0]
set password [lindex $argv 1]
set hostname [lindex $argv 2]
log_user 0

if {[llength $argv] == 0} {
  send_user "Usage: scriptname username \'password\' hostname\n"
  exit 1
}

send_user "\n#####\n# $hostname\n#####\n"

spawn ssh -q -o StrictHostKeyChecking=no $username@$hostname

expect {
  timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
  eof { send_user "\nSSH failure for $hostname\n"; exit 1 }
  "*assword"
}

send "$password\r"

expect {
  timeout { send_user "\nLogin failed. Password incorrect.\n"; exit 1}
  "*\$ "
}

send_user "\nPassword is correct\n"
send "exit\r"
close

Exemple d'utilisation :

./script_name user_foo pass_bar hostname.com

Il essaierait seulement de vous connecter et de donner un message d'erreur au cas où quelque chose se serait mal passé et, sinon, il dirait "Le mot de passe est correct" et quitterait la session.

Certains des paramètres dépendent du système auquel vous vous connectez. De plus, en utilisant expect, vous savez ce que sera la sortie lorsque vous vous connectez et exécutez des commandes.

Ce site le tutoriel couvrira vos besoins

0voto

Avez-vous réellement copié votre clé publique dans le fichier .ssh/authorized_keys de root ? Je fais toujours "chmod -R go= /root/.ssh" après, et je vérifie aussi la propriété.

Si vous utilisez selinux, vous devrez "restorecon" sur le fichier authorized_keys et le répertoire .ssh également.

Et si vous voulez vous connecter en tant que root, vous devez vérifier /etc/ssh/sshd_config et recharger sshd.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X