Lors de l'utilisation de scripts Perl, il s'agit d'une méthode courante pour obtenir des informations sur le nœud d'exécution via Net::OpenSSH. Dans un certain environnement, une erreur se produit lors de l'exécution d'une commande. Le code correspondant est affiché ci-dessous.
my $ssh_ops = {user => "root", password => "password", master_opts => [-o => "UserKnownHostsFile=/dev/null", -o => "StrictHostKeyChecking=no"]};
my $ssh = Net::OpenSSH->new($host_ip, %$ssh_ops);
# while( my ($key,$value) = each %ssh) {
# if (defined $value) {
# print "\n==== debug: $key => $value\n";
# }
# }
$ssh->error and return "fail: cann't access by ssh";
Lorsque ce code est exécuté, "fail: can't access by ssh" sera renvoyé directement. Vérifiez manuellement que vous pouvez vous connecter normalement au nœud spécifié via ssh sur le nœud actuel.
Libérez le contenu du commentaire, déboguez et imprimez les informations suivantes :
==== debug: _error => ctl_dir /root/.libnet-openssh-perl/ is not secure
==== debug: _host => 10.0.123.123
Vérifiez les autorisations du dossier /root à ce moment
执行命令 :stat /root 23-08-03 - 13:45:41
File: '/root'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 8912897 Links: 29
Access: (0775/drwxrwxr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Notez que les autorisations ici ont été modifiées en 0755. Dans des circonstances normales, les autorisations du répertoire /root devraient être Access : (0550/dr-xr-x—) Utilisez la commande chmod pour modifier les autorisations du dossier /root,
et exécutez-le à nouveau et ce sera normal.
Suggestion : Ne modifiez pas facilement les attributs des dossiers système tels que /root pour éviter des problèmes inutiles !