在使用perl脚本的时候,通过Net::OpenSSH去获取执行节点的信息是一种常用的方法。在某个环境中,执行命令的时候出错,下面展示一下相关的代码
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";
在这段代码执行的时候,直接返回“fail: cann’t access by ssh” 通过手动的方式进行验证,在当前节点通过ssh方式是可以正常登录指定节点的。
将注释的内容放开,进行调试,打印出如下信息:
==== debug: _error => ctl_dir /root/.libnet-openssh-perl/ is not secure==== debug: _host => 10.0.123.123
这个时候查看/root文件夹的权限
执行命令 :stat /root 23-08-03 - 13:45:41File: '/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)
注意,这里的权限变为了0755,正常情况下 /root目录的权限应该是Access: (0550/dr-xr-x—)
使用chmod命令将/root文件夹的权限更改一下,再次执行就正常了。
建议: 不要轻易更改/root等系统文件夹的属性,避免一些不必要的问题!